標準C和C++將編譯過程定義為9個階段(Phases of Translation):
1.字符映射(Character Mapping)
文件中的物理源字符被映射到源字符集中,其中包括三字符運算符的替換、控制字符(行尾的回車換行)的替換。許多非美式鍵盤不支持基本源字符集中的一些字符,文件中可用三字符來代替這些基本源字符,以??為前導。但如果所用鍵盤是美式鍵盤,有些編譯器可能不對三字符進行查找和替換,需要增加-trigraphs編譯參數。在C++程序中,任何不在基本源字符集中的字符都被它的通用字符名替換。
2.行合并(Line Splicing)
以反斜杠\結束的行和它接下來的行合并。
3.標記化(Tokenization)
每一條注釋被一個單獨的空字符所替換。C++雙字符運算符被識別為標記(為了開發可讀性更強的程序,C++為非ASCII碼開發者定義了一套雙字符運算符集和新的保留字集)。源代碼被分析成預處理標記。
4.預處理(Preprocessing)
調用預處理指令并擴展宏。使用#include指令包含的文件,重復步驟1到4。上述四個階段統稱為預處理階段。
5.字符集映射(Character-set Mapping)
源字符集成員、轉義序列被轉換成等價的執行字符集成員。例如:'\a'在ASCII環境下會被轉換成值為一個字節,值為7。
6.字符串連接(String Concatenation)
相鄰的字符串被連接。例如:"""hahaha""huohuohuo"將成為"hahahahuohuohuo"。
7.翻譯(Translation)
進行語法和語義分析編譯,并翻譯成目標代碼。
8.處理模板
處理模板實例。
9.連接(Linkage)
解決外部引用的問題,準備好程序映像以便執行。