VS2013 预定义的宏 Visual Studio 2013 预定义的宏

https://msdn.microsoft.com/zh-cn/library/b0084kay(v=vs.120).aspx

列出预定义的 ANSI/ISO C99 和 Microsoft C++ 实现预处理宏。

本文中所列的一些预定义宏用多个值进行定义。

ANSI 兼容的预定义宏

说明

__DATE__

Mmm 与 TIME.H 中声明的 asctime 库函数生成的日期相同。

__FILE__

若要确保显示文件的完整路径,请使用 /FC(所诊断源代码文件的完整路径)

__func__

以 char 数组形式返回封闭函数的未限定和未修饰名称。

 
 
void Foo(){
printf("%s
", __func__);
} // prints “Foo”

__LINE__

#line 指令改变。

__STDC__

只有提供了 /Za 编译器选项但未编译 C++ 代码时才定义为整数型常数 1;否则是不确定的。

__TIME__

hh:mm:ss 形式的字符串文本。

__TIMESTAMP__

Date 为从 1 到 31 的整数。

Microsoft 专用预定义宏

说明

_ATL_VER

定义 ATL 版本,编码为整数文本。

__AVX__

指定了 /arch:AVX 或 /arch:AVX2 时进行定义。

__AVX2__

指定了 /arch:AVX2 时进行定义。

_CHAR_UNSIGNED

指定了 /J 时进行定义。

__CLR_VER

返回值是采用以下格式编码的整数文本:

Mmmbbbbb

其中,

  • M 为运行时的主版本

  • mm 为运行时的次版本

  • bbbbb 为生成号。

 
 
// 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
", __cplusplus_cli);
   #else
      printf("not defined
");
   #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
", e1.GetID());
	printf("e2 ID: %i
", e2.GetID());
	printf("e3 ID: %i
", e3.GetID());

	// Output 
	// ------------------------------ 
	// e1 ID: 0 
	// e2 ID: 1 
	// e3 ID: 2 

	return 0;
}

__cplusplus

仅定义 C++ 程序。

_CPPRTTI

定义使用 /GR(启用运行时间类型信息)编译的代码。

_CPPUNWIND

定义通过使用其中一个 /EH(异常处理模型) 标志编译的代码。

_DEBUG

当使用 /LDd/MDd 和 /MTd 编译时定义。

_DLL

在指定 /MD 或 /MDd(多线程 DLL)时定义。

__FUNCDNAME__

将封闭函数的修饰名定义为字符串文本。

如果你使用的是 __FUNCDNAME__/EP 或 /P 编译器选项, 不展开。

__FUNCTION__ 宏来显示函数信息。

 
// Demonstrates functionality of __FUNCTION__, __FUNCDNAME__, and __FUNCSIG__ macros 
void exampleFunction()
{
	printf("Function name: %s
", __FUNCTION__);
	printf("Decorated function name: %s
", __FUNCDNAME__);
	printf("Function signature: %s
", __FUNCSIG__);
	
	// Sample Output 
	// ------------------------------------------------- 
	// Function name: exampleFunction 
	// Decorated function name: ?exampleFunction@@YAXXZ 
	// Function signature: void __cdecl exampleFunction(void)
}

__FUNCSIG__

将封闭函数的签名定义为字符串文本。

如果你使用的是 __FUNCSIG__/EP 或 /P 编译器选项, 不展开。

__cdecl。

__FUNCDNAME__。

__FUNCTION__

将封闭函数的未修饰名定义为字符串。

如果你使用的是 __FUNCTION__/EP 或 /P 编译器选项, 不展开。

__FUNCDNAME__。

_INTEGRAL_MAX_BITS

报告整型作为整形文本的最大大小(以位为单位)。

 
 
// integral_max_bits.cpp
#include <stdio.h>
int main() {
   printf("%d
", _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 编译器选项的整数型值:

  • VFPv3)。

  • 如果使用 /arch:VFPv4,则在 40-49 的范围内。

  • 有关更多信息,请参见/arch (x86)

_M_IX86_FP

扩展为指示使用哪个 /arch 编译器选项的整数型值:

  • 0(如果使用了 /arch:IA32)。

  • 1(如果使用了 /arch:SSE)。

  • 当指定 /arch:AVX2 时,还将定义 __AVX__ 和 __AVX2__

  • 有关更多信息,请参见/arch (x86)

_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

当指定 /MD 或 /MDd(多线程 DLL)或 /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
", _OPENMP);
}

_VC_NODEFAULTLIB

当使用 /Zl 时定义;有关详细信息,请参阅 /Zl(省略默认库名)

_WCHAR_T_DEFINED

当项目中包含的系统标头文件使用 /Zc:wchar_t 或者定义 wchar_t 时定义。

_WIN32

始终定义。

_WIN64

定义为Win64应用程序。

http://www.cnblogs.com/oloroso/p/5506097.html