#
) 開頭的程式碼行。這些程式碼行不是程式語句,而是給預處理器的指令。預處理器在程式碼的實際編譯開始之前檢查程式碼,並在常規語句實際生成任何程式碼之前解析所有這些指令。;
)。讓預處理器指令跨越多行的唯一方法是在行尾的換行符前加上一個反斜槓 (\
)。#define
。其語法是:#define 識別符號 替換內容
identifier
(識別符號)替換為 replacement
(替換內容)。這個 replacement
可以是一個表示式、一個語句、一個程式碼塊或任何東西。預處理器本身不理解 C++,它只是簡單地將所有出現的 identifier
替換為 replacement
。
|
|
TABLE_SIZE
之後,程式碼變得等同於:
|
|
#define
也可以與引數一起使用來定義函式宏:
|
|
getmax
出現的地方,替換為替換表示式,同時也會將每個引數替換為其識別符號,正如你期望一個函式那樣工作。
|
|
5 7 |
#undef
預處理器指令取消定義它為止。
|
|
|
|
#
和 ##
)。#
後面跟著一個引數名,它會被替換為一個包含傳入引數的字串字面量(就像用雙引號括起來一樣)。
|
|
|
|
##
連線兩個引數,它們之間不留任何空格。
|
|
|
|
#ifdef
允許一段程式程式碼只有在作為引數指定的宏已經被定義時才被編譯,無論其值是什麼。例如:
|
|
int table[TABLE_SIZE];
只有在 TABLE_SIZE
之前已經用 #define
定義過才會被編譯,而不管它的值是多少。如果它沒有被定義,那行程式碼將不會被包含在程式編譯中。#ifndef
的作用恰恰相反:在 #ifndef
和 #endif
指令之間的程式碼,只有在指定的識別符號之前沒有被定義時才會被編譯。例如:
|
|
TABLE_SIZE
還沒有被定義,那麼它將被定義為 100。如果它已經存在,它將保持其先前的值,因為 #define
指令將不會被執行。#if
、#else
和 #elif
(即 "else if")指令用於指定要滿足的某個條件,以使其包圍的程式碼部分被編譯。#if
或 #elif
後面的條件只能評估常量表達式,包括宏表示式。例如:
|
|
#if
、#elif
和 #else
連結起來的指令結構以 #endif
結尾。#ifdef
和 #ifndef
的行為也可以透過在任何 #if
或 #elif
指令中使用特殊運算子 defined
和 !defined
來實現。
|
|
#line
指令允許我們控制這兩樣東西:程式碼檔案中的行號以及發生錯誤時我們希望出現的檔名。其格式為:#line 行號 "檔名"
number
(行號)是將被賦給下一行程式碼的新行號。後續程式碼行的行號將從此開始逐一增加。"filename"
(檔名)是一個可選引數,允許重新定義將要顯示的檔名。例如:
|
|
"assigning variable"
的第 20 行。
|
|
__cplusplus
未定義時中止編譯過程(這個宏名在所有 C++ 編譯器中都是預設定義的)。#include
指令時,它會將其替換為指定的標頭檔案或檔案的全部內容。有兩種使用 #include
的方式:
|
|
<>
之間。這用於包含由實現提供的標頭檔案,例如構成標準庫的標頭檔案(iostream
, string
, ...)。這些標頭檔案是實際的檔案還是以其他形式存在是由實現定義的,但無論如何,它們都應該用這個指令正確地包含。#include
使用的語法是引號,它包含一個檔案。系統會以由實現定義的方式搜尋該檔案,這通常包括當前路徑。如果找不到檔案,編譯器會將該指令解釋為標頭檔案包含,就像引號 (""
) 被替換為尖括號 (<>
) 一樣。#pragma
定義的可能引數的更多資訊,請查閱您的編譯器手冊或參考資料。#pragma
的特定引數,它將被忽略——不會產生語法錯誤。_
開始和結束):宏 | 值 |
---|---|
__LINE__ | 代表正在編譯的原始碼檔案中當前行的整數值。 |
__FILE__ | 一個字串字面量,包含正在編譯的原始檔的假定名稱。 |
__DATE__ | 一個形式為 "Mmm dd yyyy" 的字串字面量,包含編譯過程開始的日期。 |
__TIME__ | 一個形式為 "hh:mm:ss" 的字串字面量,包含編譯過程開始的時間。 |
__cplusplus | 一個整數值。所有 C++ 編譯器都將此常量定義為某個值。其值取決於編譯器支援的標準版本:
|
__STDC_HOSTED__ | 如果實現是託管實現(所有標準標頭檔案都可用),則為 1 。否則為 0 。 |
宏 | 值 |
---|---|
__STDC__ | 在 C 語言中:如果定義為 1 ,則該實現符合 C 標準。在 C++ 中:由實現定義。 |
__STDC_VERSION__ | 在 C 語言中:
|
__STDC_MB_MIGHT_NEQ_WC__ | 如果多位元組編碼可能在字元字面量中賦予字元不同的值,則為 1 。 |
__STDC_ISO_10646__ | 一個形式為 yyyymmL 的值,指定了 wchar_t 字元編碼所遵循的 Unicode 標準的日期。 |
__STDCPP_STRICT_POINTER_SAFETY__ | 如果實現具有嚴格指標安全性,則為 1 (參見 get_pointer_safety )。 |
__STDCPP_THREADS__ | 如果程式可以擁有多個執行緒,則為 1 。 |
|
|
This is the line number 7 of file /home/jay/stdmacronames.cpp. Its compilation began Nov 1 2005 at 10:12:29. The compiler gives a __cplusplus value of 1 |
![]() 異常 | ![]() 目錄 | ![]() 檔案輸入/輸出 |