C/C++程序處理步驟

一、C語(yǔ)言編譯主要分為四個(gè)階段

1.預(yù)處理

此階段主要完成#符號(hào)后面的各項(xiàng)內(nèi)容到源文件的替換,往往一些莫名其妙的錯(cuò)誤都是出現(xiàn)在頭文件中的,要在工程中注意積累一些錯(cuò)誤知識(shí)。

  • (1)、#ifdef等內(nèi)容,完成條件編譯內(nèi)容的替換
  • (2)、#include中內(nèi)容,在當(dāng)前目錄或者指定目錄,或者默認(rèn)目錄搜索頭文件,并將頭文件拷貝到源文件中。
  • (3)、#define的內(nèi)容,替換define的內(nèi)容(包括上一步的頭文件中的define內(nèi)容)此階段產(chǎn)生[.i]文件。
2.編譯

此階段完成語(yǔ)法和語(yǔ)義分析,然后生成中間代碼,此中間代碼是匯編代碼,但是還不可執(zhí)行,gcc編譯的中間文件是[.s]文件。
在此階段會(huì)出現(xiàn)各種語(yǔ)法和語(yǔ)義錯(cuò)誤,特別要小心未定義的行為,這往往是致命的錯(cuò)誤。
第一個(gè)階段和第二個(gè)階段由編譯器完成。

3.匯編

此階段主要完成將匯編代碼翻譯成機(jī)器碼指令,并將這些指令打包形成可重定位的目標(biāo)文件,[.O]文件,是二進(jìn)制文件。
此階段由匯編器完成。

4.鏈接

此階段完成文件中調(diào)用的各種函數(shù)跟靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的連接,并將它們一起打包合并形成目標(biāo)文件,即可執(zhí)行文件。此階段由鏈接器完成。
gcc編譯C語(yǔ)言主要用到以下幾個(gè)程序:C編譯器gcc、匯編器as、鏈接器ld和二進(jìn)制轉(zhuǎn)換工具objcopy。

二、編譯分為哪些階段?

編譯過(guò)程分為分析和綜合兩個(gè)部分,并進(jìn)一步劃分為詞法分析、語(yǔ)法分析、 語(yǔ)義分析、 代碼優(yōu)化、存儲(chǔ)分配和代碼生成等六個(gè)相繼的邏輯步驟。

這六個(gè)步驟只表示編譯程序各部分之間的邏輯聯(lián)系,而不是時(shí)間關(guān)系。編譯過(guò)程既可以按照這六個(gè)邏輯步驟順序地執(zhí)行,也可以按照平行互鎖方式去執(zhí)行。在確定編譯程序的具體結(jié)構(gòu)時(shí),常常分若干遍實(shí)現(xiàn)。對(duì)于源程序或中間語(yǔ)言程序,從頭到尾掃視一次并實(shí)現(xiàn)所規(guī)定的工作稱作一遍。每一遍可以完成一個(gè)或相連幾個(gè)邏輯步驟的工作。例如,可以把詞法分析作為第一遍;語(yǔ)法分析和語(yǔ)義分析作為第二遍;代碼優(yōu)化和存儲(chǔ)分配作為第三遍;代碼生成作為第四遍。反之,為了適應(yīng)較小的存儲(chǔ)空間或提高目標(biāo)程序質(zhì)量,也可以把一個(gè)邏輯步驟的工作分為幾遍去執(zhí)行。例如,代碼優(yōu)化可劃分為代碼優(yōu)化準(zhǔn)備工作和實(shí)際代碼優(yōu)化兩遍進(jìn)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容