前處理器和巨集

當編譯器遇到程式碼中的巨集時,它執行簡單的字串替換,不執行其他操作。因此,前處理器的更改不會考慮 C 程式的範圍 - 例如,巨集定義不限於在塊內,因此不受結束塊語句的'}'的影響。

根據設計,前處理器並不完整 - 有幾種型別的計算單獨由前處理器完成。

通常編譯器有一個命令列標誌(或配置設定),允許我們在預處理階段後停止編譯並檢查結果。在 POSIX 平臺上,這個標誌是 -E。因此,使用此標誌執行 gcc 會將擴充套件的源列印到 stdout:

$ gcc -E cprog.c

通常,前處理器是作為一個單獨的程式實現的,由編譯器呼叫,該程式的通用名稱是 cpp。許多前處理器發出支援資訊,例如有關行號的資訊 - 後續編譯階段使用這些資訊來生成除錯資訊。在前處理器基於 gcc 的情況下,-P 選項會抑制此類資訊。

$ cpp -P cprog.c