預編譯
處理所有的註釋,用空格代替
將所有的#define刪除,將所有的宏定義展開
處理條件編譯指令#ifdef #elif #else #endif
處理#include,展開被包含的文件
保留編譯器需要使用的#pragma
預處理指令:
gcc -E file.c -o file.i
編譯:
對預處理文件進行一系列詞法分析,語法分析和語義分析
詞法分析主要分析關鍵字、標示符、立即數等是否合法
語法分析主要分析表達式時候遵循語法規則
語義分析在語法分析的基礎上進一步分析表達式是否合法
分析結束後進行代碼優化生成相應的彙編代碼文件
編譯指令:
gcc -S file.c -o file.s
彙編
彙編器將彙編代碼轉變成機器可以執行的指令
每個彙編語句機會都對應一條機器指令
彙編指令:
gcc -c file.s -o file.o
連接器的主要作用是把各個模塊之間相互作用的部分處理好,使得各個模塊之間能夠正確的銜接。