C編譯的整個過程很復(fù)雜,大致可以分為以下四個階段:
1)預(yù)處理階段
在該階段主要完成對源代碼的預(yù)處理工作,主要包括對宏定義指令,頭文件包含指令,預(yù)定義指令和特殊字符的處理,如對宏定義的替換以及文件頭中所包含的文件中預(yù)定義代碼的替換等,總之這步主要完成一些替換工作,輸出是同源文件含義相同但內(nèi)容不同的文件。
2)編譯、優(yōu)化階段
編譯就是將第一階段處理得到的文件通過詞法語法分析等轉(zhuǎn)換為匯編語言。
優(yōu)化包括對中間代碼的優(yōu)化,如刪除公共表達(dá)式,循環(huán)優(yōu)化等;和對目標(biāo)代碼的生成進(jìn)行的優(yōu)化,如如何充分利用機器的寄存器存放有關(guān)變量的值,以減少內(nèi)存訪問次數(shù)。
3)匯編階段
將匯編語言翻譯成機器指令
4)鏈接階段
鏈接階段的主要工作是將有關(guān)的目標(biāo)文件連接起來,即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的目標(biāo)文件成為一個能夠被操作系統(tǒng)裝入執(zhí)行的統(tǒng)一整體。