轉譯階段
C 和 C++ 程式是由一或多個原始程式檔,每一個都包含部分的程式文字所組成。 原始程式檔,加上其包含的檔案 (檔案,它們使用#include前置處理器指示詞),但不是包括 [條件式編譯指示詞所移除的類似的程式碼區段#if,稱為"轉譯單位 」。
原始程式檔可以轉換在不同的時間 — 事實上,這是一般轉譯過時的檔案。 在另一個物件檔案或物件程式碼程式庫,所以處理轉譯的轉譯單位。 這些個別的翻譯轉譯單位連結到形成可執行程式或動態連結程式庫 (DLL)。 如需有關可以用做為連結器的輸出檔案的詳細資訊,請參閱LINK 輸入檔。
轉譯單位可以使用與通訊:
有外部連結的函式呼叫。
有外部連結的類別成員函式的呼叫。
直接修改具有外部連結的物件。
直接修改檔案。
(如 Microsoft Windows 架構應用程式只) 的處理序間通訊。
下列清單說明編譯器用來轉譯檔案的階段:
字元對應
原始程式檔中的字元會對應到內部來源表示。 三併詞序列會轉換成單一字元在此階段中的內部表示。Splicing 線
所有的線條結尾的反斜線 (\),後面緊跟著由新行字元加入原始程式檔組成邏輯程式敘述行與實體的行中的下一行。 它是空的除非原始程式檔必須結尾反斜線之前沒有的新行字元。Tokenization
原始程式檔會分成前置處理的語彙基元和空格字元。 原始程式檔中的註解是以一個空白字元每個所取代。 新行字元會被保留。前置處理
前置處理器指示詞的執行與巨集擴充至原始程式檔。 #include陳述式叫用前面的三個轉譯步驟,在任何包含的文字為開頭的轉譯。字集對應
所有來源字元集成員而逸出序列會轉換成其執行的字元組中的對等用法。 對於 Microsoft C 和 C++ 中,來源及執行的字集為 ASCII。字串串連
所有相鄰的字串和整個字串常值都被串連的。 例如,"String " "concatenation" 會變成 "String concatenation"。轉譯
所有的語彙基元會加以分析,語法和語意不相同 ; 這些語彙基元會轉換成物件的程式碼。連結
所有外部參考都能解析成建立可執行程式或動態連結程式庫。
編譯器會發出警告或錯誤的順序發生語法錯誤的轉譯階段。
連結器解析所有外部參考,並建立可執行程式或 DLL,藉由結合一個或多個個別處理與標準程式庫的轉譯單元。