預先定義的巨集
列出預先定義的 ANSI/ISO C99 和 Microsoft C++ 實作前置處理器巨集。
編譯器會辨識預先定義的 ANSI/ISO C99 C 前置處理器巨集,而 Microsoft C++ 實作會提供更多的巨集。 這些前置處理器巨集不接受引數,也無法重新定義。 本文中列出的某些預先定義巨集是使用多個值所定義。
符合 ANSI 標準的預先定義巨集
巨集 |
描述 |
---|---|
__DATE__ |
目前原始程式檔的編譯日期。 日期是格式為 Mmm dd yyyy 的字串常值。 月份名稱 Mmm 與宣告於 TIME.H 中的程式庫函式 asctime 產生的日期相同。 |
__FILE__ |
目前原始程式檔的名稱。 __FILE__ 展開為字串常值。 若要確保顯示檔案的完整路徑,請使用 /FC (診斷中的原始程式碼檔之完整路徑)。 |
__func__ |
傳回封入函式的非限定和未修飾名稱以做為 char 的陣列。
|
__LINE__ |
目前原始程式檔中的行號。 行號是一個十進位整數常值。 這可以使用 #line 指示詞來變更。 |
__STDC__ |
表示與 ANSI/ISO C99 標準的一致性。 只有在指定 /Za 編譯器選項而不編譯 C++ 程式碼,才定義為整數常值 1,否則為未定義。 |
__TIME__ |
目前原始程式檔的最近編譯時間。 時間是形式為 hh:mm:ss 的字串常值。 |
__TIMESTAMP__ |
目前原始程式檔的上次修改日期和時間,會以 Ddd Mmm Date hh:mm:ss yyyy 格式的字串常值表示,其中 Ddd 是當週的日次縮寫,而 Date 是從 1 到 31 的整數。 |
Microsoft 專有的預先定義巨集
巨集 |
描述 |
---|---|
_ATL_VER |
定義 ATL 版本,編碼為一個整數常值。 |
__AVX__ |
指定 /arch:AVX 或 /arch:AVX2 時所定義。 |
__AVX2__ |
指定 /arch:AVX2 時所定義。 |
_CHAR_UNSIGNED |
預設 char 類型為 unsigned。 指定 /J 時所定義。 |
__CLR_VER |
定義應用程式編譯時使用的 Common Language Runtime 版本。 傳回的值是以下列格式編碼的整數常值: Mmmbbbbb 其中:
|
__cplusplus_cli |
使用 /clr、/clr:pure 或 /clr:safe 編譯時所定義。 __cplusplus_cli 的值是整數常值 200406。 __cplusplus_cli 在整個轉譯單位中都有效。
|
__cplusplus_winrt |
當您使用 /ZW 選項編譯時所定義。 __cplusplus_winrt 的值是整數常值 201009。 |
__COUNTER__ |
展開為以 0 開始的整數常值,並在每次原始程式檔中使用它或將它加入至原始程式檔的標頭時累加 1。 當您使用先行編譯標頭檔時,__COUNTER__ 會記住其狀態。 下列範例會使用 __COUNTER__,將唯一識別項指派給同一個類型的三個不同物件。 首先,假設下列類別定義。 建構函式接受整數為參數。
在 main 中,應用程式宣告了同一個 exampleClass 類型的三個物件,並使用 __COUNTER__ 做為唯一識別項參數。
|
__cplusplus |
只為 C++ 程式定義。 |
_CPPRTTI |
為使用 /GR (啟用執行階段類型資訊) 編譯的程式碼而定義。 |
_CPPUNWIND |
為使用其中一個 /EH (例外狀況處理模型) 旗標編譯的程式碼而定義。 |
_DEBUG |
|
_DLL |
已在指定 /MD 或 /MDd (Multithreaded DLL) 時定義。 |
__FUNCDNAME__ |
只有在函式中有效。 以字串常值形式定義封入函式的裝飾名稱。 如果您使用 __FUNCDNAME__/EP 或 /P 編譯器選項,則不會展開 。 下列範例使用 __FUNCDNAME__、__FUNCSIG__ 和 __FUNCTION__ 巨集來顯示函式資訊。
|
__FUNCSIG__ |
只有在函式中有效。 以字串常值形式定義封入函式的簽章。 如果您使用 __FUNCSIG__/EP 或 /P 編譯器選項,則不會展開 。 在 64 位元作業系統上,呼叫慣例預設為 __cdecl。 如需範例,請參閱 __FUNCDNAME__。 |
__FUNCTION__ |
只有在函式中有效。 以字串常值形式定義封入函式的未裝飾名稱。 如果您使用 __FUNCTION__/EP 或 /P 編譯器選項,則不會展開 。 如需範例,請參閱 __FUNCDNAME__。 |
_INTEGRAL_MAX_BITS |
以整數常值的形式報告整數類資料類型的大小上限 (以位元為單位)。
|
_M_AMD64 |
已針對以 x64 處理器為目標的編譯進行定義。 |
_M_ARM |
已針對以 ARM 處理器為目標的編譯進行定義。 |
_M_CEE |
為使用任何 /clr 形式 (例如,/clr:oldSyntax、/clr:safe) 的編譯而定義。 |
_M_CEE_PURE |
為使用 /clr:pure 的編譯而定義。 |
_M_CEE_SAFE |
為使用 /clr:safe 的編譯而定義。 |
_M_IX86 |
已針對以 x86 處理器為目標的編譯進行定義。 這並非針對 x64 處理器所定義。 |
_M_ARM_FP |
展開為整數常值,表示使用了哪個 /arch 編譯器選項:
|
_M_IX86_FP |
展開為整數常值,表示使用了哪個 /arch 編譯器選項:
|
_M_X64 |
已針對以 x64 處理器為目標的編譯進行定義。 |
_MANAGED |
指定 /clr 時,定義為 1。 |
_MFC_VER |
定義 MFC 版本,編碼為一個整數常值。 |
_MSC_BUILD |
判斷值為整數常值,其中包含編譯器版本號碼的修訂編號元件。 修訂編號是句號分隔版本號碼的第四個部分。 例如,如果 Visual C++ 編譯器版本號碼是 15.00.20706.01,_MSC_BUILD 巨集判斷值為 1。 |
_MSC_EXTENSIONS |
這個巨集是在您使用 /Ze 編譯器選項 (預設值) 進行編譯時所定義。 定義時,其值為 1。 |
_MSC_FULL_VER |
判斷值為一個替編譯器版本號碼的主要、次要和組建編號元件進行編碼的整數常值。 主要號碼是句號分隔版本號碼的第一個部分,次要號碼是第二個部分,而組建編號則是第三個部分。 例如,如果 Visual C++ 編譯器版本號碼是 15.00.20706.01,_MSC_FULL_VER 巨集判斷值為 150020706。 在命令列輸入 cl /? 以檢視編譯器的版本號碼。 |
_MSC_VER |
判斷值為一個替編譯器版本號碼的主要和次要編號元件進行編碼的整數常值。 主要號碼是句號分隔版本號碼的第一個部分,而次要號碼是第二個部分。 例如,如果 Visual C++ 編譯器版本號碼是 17.00.51106.1,_MSC_VER 巨集判斷值為 1700。 在命令列輸入 cl /? 以檢視編譯器的版本號碼。 |
__MSVC_RUNTIME_CHECKS |
當指定其中一個 /RTC 編譯器選項時所定義。 |
_MT |
指定 /MD 或 /MDd (多執行緒的 DLL) 或 /MT 或 /MTd (多執行緒) 時所定義。 |
_NATIVE_WCHAR_T_DEFINED |
當使用 /Zc:wchar_t 時所定義。 |
_OPENMP |
在使用 /openmp 編譯時進行定義,會評估為整數常值,表示 Visual C++ 實作的 OpenMP 規格的日期。
|
_VC_NODEFAULTLIB |
使用 /Zl 時所定義。如需詳細資訊,請參閱 /Zl (省略預設程式庫名稱)。 |
_WCHAR_T_DEFINED |
當使用 /Zc:wchar_t,或者如果 wchar_t 是在專案包含的系統標頭檔中定義時所定義。 |
_WIN32 |
為 Win32 和 Win64 應用程式定義。 永遠會定義。 |
_WIN64 |
為 Win64 應用程式定義。 |