预定义的宏

列出预定义的 ANSI C和C++ Microsoft实现宏。

编译器识别预定义的ANSI C宏,并且Microsoft C++实现提供几个更多。   这些宏不带参数,并且不能重定义。 下面列出的某些预定义的宏定义与多个值。   请参见下表。有关更多信息。

ANSI兼容的预定义宏

说明

__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的ssddd  是缩写的星期和   日期  为从1的整数为31。

特定于Microsoft的预定义宏

说明

_ATL_VER

定义ATL版本。

在 Visual Studio 2010中, _ATL_VER  定义为0x1000。

_CHAR_UNSIGNED

默认   char  类型无符号。   定义,当   /J  指定。

__CLR_VER

当应用程序生成的,定义使用的公共语言运行时的版本。   返回的值具有以下格式:

Mmmbbbbb

其中,

  • M  是运行时的主版本

  • mm  是运行时的最低版本

  • bbbbb  是生成号。

// 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

定义,在使用编译   /LDd/MDd和   /MTd

_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  编译器选项:

  • 在范围30-39,如果   /arch  ARM选项未指定,ARM的默认结构使用了一个( VFPv3)。

  • 在范围40-49,如果使用了   /arch:VFPv4

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

_M_IX86_FP

扩展到值指示使用了哪个   /arch  编译器选项:

  • 0,如果使用了   /arch:IA32

  • 1,如果使用了   /arch:SSE

  • 2,如果使用了   /arch:SSE2。   /arch,如果未指定,此值是默认值。

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

_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

定义,当   /MD或/MDd  (多线程的DLL)或   /MT或/MTd  (多线程)指定。

_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

定义为警告的应用程序。

_Wp64

定义,指定   /Wp64时。

如下表所示,编译器生成反映指定的处理器选项的预处理器标识符的值。

_M_IX86的值

选项在开发环境中

命令行选项

得到的值。

组合

/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值