列出预定义的 ANSI/ISO C99 和 Microsoft C++ 实现预处理宏。
本文中所列的一些预定义宏用多个值进行定义。
|
宏 |
说明 |
|---|---|
|
__DATE__ |
Mmm 与 TIME.H 中声明的 asctime 库函数生成的日期相同。 |
|
__FILE__ |
/FC(所诊断源代码文件的完整路径)。 |
|
__func__ |
以 char 数组形式返回封闭函数的未限定和未修饰名称。 void Foo(){
printf("%s\n", __func__);
} // prints “Foo”
|
|
__LINE__ |
#line 指令改变。 |
|
__STDC__ |
/Za 编译器选项但未编译 C++ 代码时才定义为整数型常数 1;否则是不确定的。 |
|
__TIME__ |
hh:mm:ss 形式的字符串文本。 |
|
__TIMESTAMP__ |
Date 为从 1 到 31 的整数。 |
|
宏 |
说明 |
|---|---|
|
_ATL_VER |
定义 ATL 版本,编码为整数文本。
|
|
__AVX__ |
指定了 /arch:AVX 或 /arch:AVX2 时进行定义。 |
|
__AVX2__ |
指定了 /arch:AVX2 时进行定义。 |
|
_CHAR_UNSIGNED |
/J 时进行定义。 |
|
__CLR_VER |
返回值是采用以下格式编码的整数文本: Mmmbbbbb 其中,
// clr_ver.cpp
// compile with: /clr
using namespace System;
int main() {
Console::WriteLine(__CLR_VER);
}
|
|
__cplusplus_cli |
__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 |
__cplusplus_winrt 的值是整数文本 201009。 |
|
__COUNTER__ |
当你使用预编译标头时,__COUNTER__会记住其状态。 __COUNTER__,将唯一标识符分配到同一类型的三个不同的对象。 构造函数将一个整数作为参数。 // initialize object with a read-only unique ID
exampleClass::exampleClass(int nID)
{
m_nID = nID;
}
int exampleClass::GetID()
{
return m_nID;
}
__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 |
/EH(异常处理模型) 标志编译的代码。 |
|
_DEBUG |
/MTd 编译时定义。 |
|
_DLL |
/MD 或 /MDd(多线程 DLL)时定义。 |
|
__FUNCDNAME__ |
修饰名定义为字符串文本。 不展开。 __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__ |
将封闭函数的签名定义为字符串文本。 不展开。 __cdecl。 __FUNCDNAME__。 |
|
__FUNCTION__ |
将封闭函数的未修饰名定义为字符串。 不展开。 __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 |
这不是为 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 |
定义时,值为 1。 |
|
_MSC_FULL_VER |
在命令行中键入 cl /?,查看编译器的版本号。 |
|
_MSC_VER |
主版本号是句点分隔的版本号的第一个部分,而次版本号是第二个部分。 在命令行中键入 cl /?,查看编译器的版本号。 |
|
__MSVC_RUNTIME_CHECKS |
/RTC 编译器选项时定义。 |
|
_MT |
/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(省略默认库名)。 |
|
_WCHAR_T_DEFINED |
/Zc:wchar_t 或者定义 wchar_t 时定义。 |
|
_WIN32 |
始终定义。 |
|
_WIN64 |
定义为Win64应用程序。 |