原文:https://docs.microsoft.com/zh-cn/previous-versions/b0084kay(v=vs.120)
列出预定义的 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 | 编译应用程序时,定义使用的公共语言运行时的版本。 返回值是采用以下格式编码的整数文本:
Mmmbbbbb 其中,
|
__cplusplus_cli | 当使用 /clr、/clr:pure 或 /clr:safe 编译时定义。 __cplusplus_cli 的值是整数文本 200406。 __cplusplus_cli 的效力范围是整个翻译单元。
|
__cplusplus_winrt | 当使用 /ZW 选项来编译时定义。 __cplusplus_winrt 的值是整数文本 201009。 |
__COUNTER__ | 扩展成一个以 0 开始的整数文本,该整数每次用于源文件或源文件包含的标头时增加 1。 当你使用预编译标头时,__COUNTER__ 会记住其状态。 |
仅定义 C++ 程序。 | |
_CPPRTTI | 定义使用 /GR(启用运行时间类型信息)编译的代码。 |
_CPPUNWIND | 定义通过使用其中一个 /EH(异常处理模型) 标志编译的代码。 |
_DEBUG | 当使用 /LDd、/MDd 和 /MTd 编译时定义。 |
_DLL | 在指定 /MD 或 /MDd(多线程 DLL)时定义。 |
__FUNCDNAME__ | |
仅在函数中有效。 将封闭函数的签名定义为字符串文本。
如果你使用的是 __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 的应用程序。 |
请参见
参考
1