列出預定義的 ANSI C和C++ Microsoft實現宏。
編譯器識別預定義的ANSI C宏,並且Microsoft C++實現提供幾個更多。這些宏不帶參數,並且不能重定義。下面列出的某些預定義的宏定義與多個值。請參見下表。有關更多信息。
| 宏 |
說明 |
|---|---|
| __DATE__ |
當前源文件的生成日期。該日期是窗體 Mmm yyyy的dd的字符串。月份名稱 Mmm 與在庫函數生成相同的日期。TIME.H.聲明的 asctime。 |
| __FILE__ |
當前源文件的名稱。__FILE__ 擴展到雙引號括起來的字符串。若要確保文件的完整路徑顯示,請使用 /FC(所診斷源代碼文件的完整路徑)。 |
| __LINE__ |
在當前源文件中的行號。行號是一個十進制整數常數。它可以更改與 #line 指令。 |
| __STDC__ |
指示完全符合與 ANSI C標准。定義為整型常數1,僅當提供 /Za 編譯器選擇和不生成C++代碼;否則為未定義。 |
| __TIME__ |
當前源文件的最新生成時。時間是窗體 hh: 為: ss的字符串。 |
| __TIMESTAMP__ |
當前源文件的上次修改日期和時間,是以字符串形式 ddd Mmm日期格式: 為: yyyy的ss,ddd 是縮寫的星期和 日期 為從1的整數為31。 |
| 宏 |
說明 |
|---|---|
| _ATL_VER |
定義ATL版本。 在 Visual Studio 2010中,_ATL_VER 定義為0x1000。 |
| _CHAR_UNSIGNED |
默認 char 類型無符號。定義,當 /J 指定。 |
| __CLR_VER |
當應用程序生成的,定義使用的公共語言運行時的版本。返回的值具有以下格式: Mmmbbbbb 其中,
// 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__ |
用於源文件的源文件或包含的標頭時,擴展為從0開始並提高x 1的整數。當您使用預編譯標頭時,__COUNTER__ 確保其狀態。 下面的示例使用 __COUNTER__ 分配唯一標識符到同一類型的三個不同的對象。 首先,假定下面的類定義。構造函數采用整數作為參數。 在主,應用程序聲明類型 exampleClass三個對象,使用 __COUNTER__ 作為唯一標識符參數。 // Demonstration of __COUNTER__, assigns unique identifiers to
// different objects of the same type
int main(int argc, char** argv)
{
// __COUNTER__ is initially defined as 0
exampleClass e1(__COUNTER__);
// having been referenced, __COUNTER__ is now defined as 1
exampleClass e2(__COUNTER__);
// __COUNTER__ is now defined as 2
exampleClass e3(__COUNTER__);
printf("e1 ID: %i\n", e1.GetID());
printf("e2 ID: %i\n", e2.GetID());
printf("e3 ID: %i\n", e3.GetID());
// Output
// ------------------------------
// e1 ID: 0
// e2 ID: 1
// e3 ID: 2
return 0;
}
|
| __cplusplus |
定義僅適用於C++程序。 |
| _CPPRTTI |
定義為代碼編譯 /GR ("啟用運行時類型信息)。 |
| _CPPUNWIND |
定義為代碼編譯 /GX ("啟用異常處理)。 |
| _DEBUG |
|
| _DLL |
定義,當 /MD或/MDd (多線程的DLL)指定。 |
| __FUNCDNAME__ |
僅在函數中有效。定義封閉函數的 修飾名 作為字符串。 如果您使用的是,/EP 或 /P 編譯器選項,__FUNCDNAME__ 不展開。 下面的示例使用 __FUNCDNAME__、__FUNCSIG__和 __FUNCTION__ 宏顯示函數信息。 // Demonstrates functionality of __FUNCTION__, __FUNCDNAME__, and __FUNCSIG__ macros
void exampleFunction()
{
printf("Function name: %s\n", __FUNCTION__);
printf("Decorated function name: %s\n", __FUNCDNAME__);
printf("Function signature: %s\n", __FUNCSIG__);
// Sample Output
// -------------------------------------------------
// Function name: exampleFunction
// Decorated function name: ?exampleFunction@@YAXXZ
// Function signature: void __cdecl exampleFunction(void)
}
|
| __FUNCSIG__ |
僅在函數中有效。定義封閉函數的簽名為字符串。 如果您使用的是,/EP 或 /P 編譯器選項,__FUNCSIG__ 不展開。 默認情況下在64位操作系統上,調用約定是 __cdecl。 有關示例,請參見 __FUNCDNAME__。 |
| __FUNCTION__ |
僅在函數中有效。定義封閉函數的修飾名稱作為字符串。 如果您使用的是,/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 APPHA的平台(不再支持)。 |
| _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 處理器家族(ipf) 64位處理器。 |
| _M_ARM_FP |
擴展到值指示使用了哪個 /arch 編譯器選項:
|
| _M_IX86_FP |
擴展到值指示使用了哪個 /arch 編譯器選項:
|
| _M_MPPC |
定義了Power 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 |
計算為編譯器的版本號的major、minor和生成號元素。專業數字為句點分隔的版本號的第一個元素,該次版本號是第二個元素,並且,生成號是第三個元素。例如,因此,如果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 |
|
| _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應用程序。 |
| _Wp64 |
定義,指定 /Wp64時。 |
如下表所示,編譯器生成反映指定的處理器選項的預處理器標識符的值。
| 選項在開發環境中 |
命令行選項 |
得到的值。 |
|---|---|---|
| 組合 |
/GB |
_M_IX86 = 600 (默認值。將來的編譯器會發出一個不同的值反映主導處理器。) |
| Pentium |
/G5 |
_M_IX86 = 500 |
| Pentium Pro、Pentium II和Pentium III |
/G6 |
_M_IX86 = 600 |
| 80386 |
/G3 |
_M_IX86 = 300 |
| 80486 |
/G4 |
_M_IX86 = 400 |
