源链接: http://msdn.microsoft.com/zh-cn/library/b0084kay(v=vs.110).aspx
列出预定义的 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__ 分配唯一标识符到同一类型的三个不同的对象。 首先,假定下面的类定义。构造函数采用整数作为参数。
C++
// initialize object with a read-only unique ID exampleClass::exampleClass(int nID) { m_nID = nID; } int exampleClass::GetID() { return m_nID; } 在主,应用程序声明类型 exampleClass三个对象,使用 __COUNTER__ 作为唯一标识符参数。
C++
// 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__ 宏显示函数信息。
C++
// 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 |