C++是從C發展而來的,預處理也是從C繼承而來的。 預處理是在編譯之前進行的處理,C C++ 的預處理主要是巨集定義、檔案包含和條件編譯。
預處理指令基於#
數字開頭的 ** 行,#
除了任何空格字元外,該數字必須是行中的第乙個字元。 #
在指令關鍵字之後,在關鍵字和#
允許使用任意數量的空格字元,並且整行語句構成乙個預處理指令,該指令將在編譯器編譯之前對原始碼進行一些轉換。
常用的預處理指令:
巨集定義也稱為巨集替換、巨集替換或簡稱“巨集”。
1)無引數巨集定義
格式如下:定義識別符號文字。
識別符號是所謂的符號常量,也稱為“巨集名稱”。
例如#define pi 3.1415926
注意:巨集名稱通常大寫。
巨集的使用提高了程式的多功能性和易讀性,減少了不一致,減少了輸入錯誤,並促進了修改。 例如,陣列大小通常由巨集定義。
是的#undef
命令終止巨集定義的範圍。
巨集定義可以巢狀。
2) 帶引數的巨集
除了一般的字串替換外,還需要引數替換。
格式如下:定義巨集名(參數列)文字。
例如#define s(a,b) a*b
將area=s(3,2);
若要執行巨集替換,第一步是替換area=a*b;
,則第二步替換為area=3*2;
注意:有時巨集替換的結果與我們預期的不同,需要注意的是,巨集替換只是替換。
C++ 程式檔案中的乙個檔案包含另乙個檔案的內容。
格式如下:include"檔名"
或。 include 檔名
常見用法:
包括標準庫標頭檔案。注意:包括舊式標準庫標頭。
iostream.h
僅支援窄字符集iostream
則支援窄字符集和寬字符集。 一般用途iostream
相關文件:在 C 語言中包含和包含"filename"區別。
編譯單元是包含過程之後的檔案,包含的檔案是原始檔的一部分。
編譯後,您只得到乙個目標檔案.obj
包含的檔案也稱為“標頭檔案”或“標頭檔案”或“標頭檔案”,並且是常用的。 h 作為副檔名。
修改標頭檔案時,將重新編譯包含它的所有檔案。
除了函式原型和巨集定義外,標頭檔案的內容還可以有結構定義和全域性變數定義
1)include命令指定標頭檔案;
2)檔案1包含檔案2,檔案2使用檔案3,則檔案3的include命令應放在檔案1頭的第一行;
3)包含可以巢狀;
4)“檔名”為標準呼叫方式,系統進入頭檔案目錄查詢檔案"檔名"首先在當前目錄中進行搜尋,然後在頭檔案目錄中進行搜尋
5) 包含檔案中的靜態全域性變數不需要在包含檔案中宣告。
有些語句是在滿足條件時編譯的。 例如,不同的平台使用不同的實現,需要針對平台進行編譯。
格式:ifdef 識別符號。
第 1 部分 其他
第 2 段結束
或。 #ifdef
第 1 段結束
注意:在上述格式中,段 1 僅在定義識別符號後才參與編譯。
或。 ifndef 識別符號。
定義 ID1
第 1 段結束
注意:在上述格式中,如果未定義識別符號,則重新定義ID 1並執行段1。
或。 if 表示式 1
第 1 段 ELIF 表達 2 第 2 段
ELIF 表示式 n
第 n 段 else
段 n+1
#endif
注意:在上述格式中,當表示式 1 為 true 時,將編譯程式段 1,如果不是,則編譯程式段 2。
使用條件編譯,可以使目標程式更小,執行時間更短。