共用方式為


預先定義巨集

列出預先定義的 ANSI Microsoft C 和 C++ 實作巨集。

編譯器識別預先定義的 ANSI C 巨集, Microsoft C++ 實作提供了更多。 這些巨集不使用引數,而不能重新定義。 下列某些預先定義的巨集定義包含多個值。 請參閱下表以取得詳細資訊。

ANSI 標準的預先定義巨集。

巨集

描述

__DATE__

目前原始程式檔中編輯日期。 這個日期是表單 Mmm yyyy 的 dd的字串常值 (String Literal)。 月份名稱 Mmm 則會與程式庫函式會產生相同的日期。TIME.H. 宣告的 asctime

__FILE__

目前原始程式檔 (Source File) 的名稱。 __FILE__ 展開為雙引號括住的字串。 若要確保檔案的完整路徑所顯示的,請使用 /FC (診斷中的原始程式碼檔之完整路徑)

__LINE__

在目前原始程式檔的行號。 行號是十進位整數常數。 它可以變更與 #line 指示詞。

__STDC__

表示完全符合與 ANSI C 標準。 定義為整數常數 1 時,才會 /Za 編譯器選項和未編譯 C++ 程式碼;否則會是未定義的。

__TIME__

目前原始程式檔的新編譯時間。 時間是表單 hh: " mm ": ss的字串常值 (String Literal)。

__TIMESTAMP__

目前原始程式檔中最近一次修改的日期和時間,表示為字串常值 (String Literal) 的格式 ddd Mmm 日期格式: " mm ": yyyy 的特性, ddd 是縮寫的週和 日期 是從 1 至 31 的整數。

Microsoft 專有的預先定義巨集。

巨集

描述

_ATL_VER

定義 ATL 版本。

在 Visual Studio 2010, _ATL_VER 定義為 0x1000。

_CHAR_UNSIGNED

根據預設 char 型別為不帶正負號的。 定義時, /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
}

__COUNTER__

,用於原始程式檔的原始程式檔 (Source File) 或包含的標頭時,展開為 0 開始並加上 1 的整數。 因此,使用先行編譯標頭檔時,__COUNTER__ 記住其狀態。

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

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

在主應用程式,宣告型別 exampleClass三個物件,使用 __COUNTER__ 當做唯一識別項參數。

__cplusplus

定義 (僅限 C++ 程式。

_CPPRTTI

定義用於編譯的程式碼。 /GR (啟用執行階段型別資訊)。

_CPPUNWIND

定義用於編譯的程式碼。 /GX (啟用例外處理)。

_DEBUG

定義,以編譯 /LDd/MDd/MTd

_DLL

定義時, /MD (英文) 或/MDd (英文) (多個執行緒的 DLL) 指定。

__FUNCDNAME__

只適用於函式中。 定義封入函式的 裝飾名稱 做為字串。

如果您使用 /EP/P 編譯器選項,__FUNCDNAME__ 未展開。

下列範例會使用 __FUNCDNAME__、 __FUNCSIG__和 __FUNCTION__ 巨集顯示函式資訊。

__FUNCSIG__

只適用於函式中。 定義封入函式的簽章為字串。

如果您使用 /EP/P 編譯器選項,__FUNCSIG__ 未展開。

在 64 位元作業系統上,呼叫慣例是 __cdecl 預設值。

如需範例,請參閱 __FUNCDNAME__。

__FUNCTION__

只適用於函式中。 定義封入函式的裝飾名稱 (Undecorated Name) 做為字串。

如果您使用 /EP/P 編譯器選項,__FUNCTION__ 未展開。

如需範例,請參閱 __FUNCDNAME__。

_INTEGRAL_MAX_BITS

報告最大大小 (以位元組為單位) 的整數類資料型別的。

// integral_max_bits.cpp
#include <stdio.h>
int main() {
   printf("%d\n", _INTEGRAL_MAX_BITS);
}

_M_ALPHA

定義用於 DEC Alpha 平台 (已不再支援)。

_M_AMD64

定義提供 x64 處理器。

_M_CEE

定義指定或使用 /clr 的編輯 (/clr:oldSyntax/clr:safe所有表單,)。

_M_CEE_PURE

定義用於 /clr:pure的編輯器。

_M_CEE_SAFE

定義用於 /clr:safe的編輯器。

_M_IX86

定義為 x86 處理器。 請參閱以下 _M_IX86 的值 資料表以取得詳細資訊。 這不會提供 x64 處理器中定義。

_M_IA64

定義為 Itanium 處理器系列 64 位元處理器。

_M_ARM_FP

展開為這個值會指出所使用的 /arch 編譯器選項:

  • 在這個範圍 30-39,如果 /arch ARM 未指定選項, ARM 的預設架構所使用的值 (VFPv3)。

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

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

_M_IX86_FP

展開為這個值會指出所使用的 /arch 編譯器選項:

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

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

  • 如果為 2,則使用 /arch:SSE2/arch ,如果未指定,這個值預設值為。

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

_M_MPPC

定義的電源 Macintosh 平台 (已不再支援)。

_M_MRX000

定義用於 MIPS 平台 (已不再支援)。

_M_PPC

定義用於 PowerPC 平台 (已不再支援)。

_M_X64

定義提供 x64 處理器。

_MANAGED

定義為 1 /clr 指定。

_MFC_VER

定義 MFC 版本。 例如,在 Visual Studio 2010, _MFC_VER 定義為 0x0A00。

_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++ 編譯器版本號碼為 15.00.20706.01, _MSC_VER 巨集評估為 1500。

在 Visual Studio 2010, _MSC_VER 且定義為 1600。

__MSVC_RUNTIME_CHECKS

定義,當其中一個 /RTC 編譯器選項來指定。

_MT

定義時, /MD (英文) 或/MDd (英文) (多個執行緒的 DLL) 或 /MT (英文) 或/MTd (英文) (多個執行緒) 指定。

_NATIVE_WCHAR_T_DEFINED

定義使用時, /Zc: wchar_t

_OPENMP

定義,當使用/openmp 編譯,傳回整數表示 OpenMP 規格的日期的整數實作 Visual C++ 時。

// _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 上套用。

_Wp64

定義,以指定 /Wp64時。

如下表所示,編譯器會建立指定的處理器選項的前置處理器識別項的值。

_M_IX86 的值

選項在開發環境中。

命令列選項

產生的值。

混合

/GB

_M_IX86 = 600 (預設值。 將來的編譯器將發出不同的值會反映主控處理器)。

Pentium

/G5

_M_IX86 = 500

Pro Pentium, Pentium II 和 Pentium III

/G6

_M_IX86 = 600

80386

/G3

_M_IX86 = 300

80486

/G4

_M_IX86 = 400

請參閱

參考

巨集 (C/C++)

前置處理器的運算子

前置處理器指示詞