天天看點

編譯過程

本文均來自狄泰軟體學院

預編譯

處理所有的注釋,以空格代替

将所有的#define删除,并且展開所有的宏定義

處理條件編譯指令#if,#ifdef,#elif,#else,#endif

處理#include,展開被包含的檔案

保留編譯器需要使用的#pragram指令

預處理指令示例:

gcc -E file.c -o file.i

編譯

對預處理檔案進行詞法分析,文法分析和語義分析

  詞法分析:分析關鍵字,辨別符,立即數等是否遵循文法規則

   文法分析:分析表達式是否遵循文法規則

   語義分析:在文法分析基礎上進一步分析表達式是否合法

分析結束後進行代碼優化生成相應的彙編代碼檔案

編譯器訓示示例:

gcc -S file.i -o file.s

彙編

彙編器将彙編代碼轉變為機器的可以執行指令

每條彙編語句幾乎都對應一條機器指令

c