聲明指令用于定義或取消定義條件編譯符號。
對 #define
指令的處理使給定的條件編譯符號成為已定義的(從跟在指令后面的源代碼行開始)。類似地,對 #undef
指令的處理使給定的條件編譯符號成為未定義的(從跟在指令后面的源代碼行開始)。
源文件中的任何 #define
和 #undef
指令都必須出現在源文件中第一個“標記”(第 2.4 節)的前面,否則將發生編譯時錯誤。直觀地講,#define
和 #undef
指令必須位于源文件中所有“實代碼”的前面。
示例:
#define Enterprise#if Professional || Enterprise #define Advanced#endifnamespace Megacorp.Data{ #if Advanced class PivotTable {...} #endif}
是有效的,這是因為 #define
指令位于源文件中第一個標記(namespace
關鍵字)的前面。
下面的示例產生編譯時錯誤,因為 #define
指令在實代碼后面出現:
#define Anamespace N{ #define B #if B class Class1 {} #endif}
#define
指令可用于重復地定義一個已定義的條件編譯符號,而不必對該符號插入任何 #undef
。下面的示例定義一個條件編譯符號 A
,然后再次定義它。
#define A#define A
#undef
指令可用于取消定義一個本來已經是未定義的條件編譯符號。下面的示例定義一個條件編譯符號 A
,然后兩次取消定義該符號;第二個 #undef
沒有作用但仍是有效的。
#define A#undef A#undef A