編譯程序有八個步驟。這些步驟包括:
1. 從源代碼文件中讀取字符,如果有必要的話,將字符轉換成源代碼字符集的字符。如果源代碼中的行尾字符和換行字符不一樣,就進行替換。類似地,任何三字符組符號會被替換成賭贏的單一字符。
2. 不管什麼時候,只要反斜線符號後面緊跟着換行字符,預處理器就會將兩者(反斜線和換行字符)都刪除。因爲預處理器的指令結束的地方就是行的結束字符,所以這個處理步驟會將反斜線放在一行的結尾處,以讓預處理指令在下一行繼續。
3. 此源代碼文件被分解成預處理器的記號和空格符。每個註釋都被視爲一個空格。
4. 預處理指令被執行,宏被展開。
5. “字符常量”和“字符串字面值”內的字符和轉義符,會被轉換成“運行字符集”中對應的字符。
6. 相鄰的字符串字面值被串接成一個字符串。
7. 實際的編譯工作開始:編譯器分析記號的序列,併產生對應的機器碼。
8. 鏈接器解析對外部對象和函數的引用,併產生可執行文件。如果模塊引用的外部對象或函數沒有被定義在任何翻譯單元中,鏈接器就會從外部的標準鏈接庫或其他指定的鏈接庫中複製它們。在一個程序中,一定不能多次定義外部對象和函數。