能夠講編程語言劃分爲兩大類:
- 編譯型語言
- 運行前,先由編譯器將高級語言的代碼編譯成對應機器的cpu彙編指令,而後再有彙編器彙編爲目標機器碼,生成可執行文件,而後運行最終生成的可執行文件
- 解釋型語言
- 運行時,由翻譯器將高級語言代碼反應成中間代碼,並由解釋器將該中間代碼解釋成機器碼並執行,至關於編譯和執行二合一
編譯一個C程序分爲四個階段:
一、預處理階段
二、生成彙編代碼階段
三、彙編階段
四、連接階段
ps:也就是說,gcc會生成彙編的.o文件,而後經過連接,生成.out文件
編譯的主要步驟有:詞法分析->語法分析->語義分析及相關的優化->中間代碼生成->目標代碼生成(彙編文件.s)
關於gcc、g++和gdb
linux中,使用gcc來編譯c程序,用g++來編譯c++程序,用gdb來調試程序
安裝g++:
yum install gcc-c++
安裝gcc:
yum install gcc
安裝gdb:
yum install gdb
爲何編譯成彙編代碼?
通常的編譯器,是先將高級語言轉換成彙編代碼(中間代碼),而後在彙編的基礎上優化成OBJ目標代碼,最後link成可執行文件
- C#是一種二次編譯語言,首先是經過編譯器將C#編譯成IL文件,而後經過CLR將IL文件編譯成機器碼文件,這種機器文件也只能適用於特定的CPU才能夠運行。
- java號稱一次編譯,處處運行,他也是先經過編譯器將java文件編譯成javac文件,而後須要運行的時候再經過虛擬機jvm將中間代碼翻譯成特定目標平臺的機器碼文件,不一樣的cpu的機器只須要安裝對應的虛擬機即可以執行同一份java代碼,因此java是一種先編譯後解釋的語言。
參考資料: