共用方式為


預先定義的巨集

列出預先定義的 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 的陣列。

void Foo(){
printf("%s\n", __func__);
} // prints “Foo”

__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

其中:

  • M 是執行階段的主要版本

  • mm 是執行階段的次要版本

  • bbbbb 是組建編號。

// clr_ver.cpp
// compile with: /clr
using namespace System;
int main() {
   Console::WriteLine(__CLR_VER);
}

__cplusplus_cli

使用 /clr/clr:pure/clr:safe 編譯時所定義。 __cplusplus_cli 的值是整數常值 200406。 __cplusplus_cli 在整個轉譯單位中都有效。

// cplusplus_cli.cpp
// compile with: /clr
#include "stdio.h"
int main() {
   #ifdef __cplusplus_cli
      printf("%d\n", __cplusplus_cli);
   #else
      printf("not defined\n");
   #endif
}

__cplusplus_winrt

當您使用 /ZW 選項編譯時所定義。 __cplusplus_winrt 的值是整數常值 201009。

__COUNTER__

展開為以 0 開始的整數常值,並在每次原始程式檔中使用它或將它加入至原始程式檔的標頭時累加 1。 當您使用先行編譯標頭檔時,__COUNTER__ 會記住其狀態。

下列範例會使用 __COUNTER__,將唯一識別項指派給同一個類型的三個不同物件。

首先,假設下列類別定義。 建構函式接受整數為參數。

在 main 中,應用程式宣告了同一個 exampleClass 類型的三個物件,並使用 __COUNTER__ 做為唯一識別項參數。

__cplusplus

只為 C++ 程式定義。

_CPPRTTI

為使用 /GR (啟用執行階段類型資訊) 編譯的程式碼而定義。

_CPPUNWIND

為使用其中一個 /EH (例外狀況處理模型) 旗標編譯的程式碼而定義。

_DEBUG

使用 /LDd/MDd/MTd 編譯時所定義。

_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

以整數常值的形式報告整數類資料類型的大小上限 (以位元為單位)。

// integral_max_bits.cpp
#include <stdio.h>
int main() {
   printf("%d\n", _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 編譯器選項:

  • 如果沒有指定 /arch ARM 選項,則範圍在 30-39,表示使用 ARM 的預設架構 (VFPv3)。

  • 如果使用了 /arch:VFPv4,則在範圍 40-49 中。

  • 如需詳細資訊,請參閱/arch (x86)

_M_IX86_FP

展開為整數常值,表示使用了哪個 /arch 編譯器選項:

  • 如果已使用 /arch:IA32,則為 0。

  • 如果已使用 /arch:SSE,則為 1。

  • 如果已使用 /arch:SSE2/arch:AVX/arch:AVX2,則為 2。 如果未指定 /arch,則這是預設值。 當指定 /arch:AVX 時,也會定義巨集 __AVX__。 指定 /arch:AVX2 時,也會定義 __AVX____AVX2__

  • 如需詳細資訊,請參閱/arch (x86)

_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 規格的日期。

// _OPENMP_dir.cpp
// compile with: /openmp 
#include <stdio.h> 
int main() {
   printf("%d\n", _OPENMP);
}

_VC_NODEFAULTLIB

使用 /Zl 時所定義。如需詳細資訊,請參閱 /Zl (省略預設程式庫名稱)

_WCHAR_T_DEFINED

當使用 /Zc:wchar_t,或者如果 wchar_t 是在專案包含的系統標頭檔中定義時所定義。

_WIN32

為 Win32 和 Win64 應用程式定義。 永遠會定義。

_WIN64

為 Win64 應用程式定義。

請參閱

參考

巨集 (C/C++)

前置處理器運算子

前置處理器指示詞