列出预定义的 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的ss,ddd 是缩写的星期和 日期 为从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__ 分配唯一标识符到同一类型的三个不同的对象。

首先,假定下面的类定义。构造函数采用整数作为参数。

// initialize object with a read-only unique ID
exampleClass::exampleClass(int nID)
{
m_nID = nID;
} int exampleClass::GetID()
{
return m_nID;
}

在主,应用程序声明类型 exampleClass三个对象,使用 __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

定义为代码编译 /GX ("启用异常处理)。

_DEBUG

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

_DLL

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

__FUNCDNAME__

仅在函数中有效。定义封闭函数的 修饰名 作为字符串。

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

下面的示例使用 __FUNCDNAME__、__FUNCSIG__和 __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__

仅在函数中有效。定义封闭函数的签名为字符串。

如果您使用的是,/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

定义为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

VC 预定义宏的更多相关文章

  1. C预定义宏

    作用:对于__FILE__,__LINE__,__func__这样的宏,在调试程序时是很有用的,因为你可以很容易的知道程序运行到了哪个文件的那一行,是哪个函数. 下面一个例子是打印上面这些预定义的宏的 ...

  2. 预定义宏,C语言预定义的宏详解

    1.预定义宏 对于预定义宏,相信大家并不陌生.为了方便处理一些有用的信息,预处理器定义了一些预处理标识符,也就是预定义宏.预定义宏的名称都是以"__"(两条下划线)开头和结尾的,如 ...

  3. C/C++预定义宏

    编译器识别预定义的 ANSI/ISO C99 C 预处理宏,Microsoft C++ 实现将提供更多宏.这些预处理器宏不带参数,并且不能重新定义. ANSI 兼容的预定义宏 __FILE__,__L ...

  4. 关于标准C语言的预定义宏

    标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义.下面预定义宏表,被我抄了下来.__LINE__  当前 ...

  5. OS X以及iOS中与硬件环境相关的预定义宏

    由于现在ARM处理器的飞速发展,从Apple A4到现在的Apple A7,从32位到64位,每一代处理器几乎都增加了不少特性,从而在架构上也有所不同.比如Apple A6引入了ARMv7S架构,增加 ...

  6. 关于window PC机的预定义宏win32

    MSDN 里说,VC 有 3 个预处理常量,分别是 _WIN32,_WIN64,WIN32.这三个常量如何使用呢?看起来简单,其实是很困惑的. 在 Win32 配置下,WIN32 在“项目属性-C/C ...

  7. Windows平台编译器相关的几个预定义宏

    WIN32 是在windows.h 中定义的宏,包含winodws.h则定义该宏 _WIN32/_WIN64跟windows平台有关的宏,_WIN32在windows   32位和64位下都有该宏,_ ...

  8. xcode中的预定义宏

    [xcode中的预定义宏] 1.SRCROOT,是定义本target的proj的路径. 2.OBJROOT,对象文件根路径,对象文件(即obj文件)就是中间的临时文件.中间文件输出目录的名字以“pro ...

  9. STM32F10xxx_Keil中添加的预定义宏

    目录 STM32F10xxx_Keil中添加的预定义宏 更新记录 STM32F10xxx_Keil中添加的预定义宏 更新记录 version status description date autho ...

随机推荐

  1. sql union 列的字段不一样的时候

  2. 6491: Daydream

    题目描述 You are given a string S consisting of lowercase English letters. Another string T is initially ...

  3. MyEclipse、Eclipse使用配置及部分问题

    简单总结一下myeclipse首次使用的配置,eclipse类似.总结的不是很全面,如有新的看法,欢迎下方留言. 最优设置 1.myeclipse激活 myeclipse.eclipse程序及激活工具 ...

  4. 从小白到区块链工程师:第一阶段:Go语言的HelloWorld初始(2)

    四.写下第一段Go语言代码“Hello World” 小建议:就是文件夹路径或者文件名称不要出现中文,可能会导致一些不必要的麻烦(编译失败) 在sublime中,我们在src文件夹上面,单击右键“Ne ...

  5. [转]jQuery 选择器和dom操作

    居然是12年的总结.... 文章地址: http://www.cnblogs.com/happyPawpaw/articles/2595092.html JQuery选择器 1.基本选择器 基本选择器 ...

  6. Java并发编程(三)-- 多线程的“问题”

    竞态条件与临界区 在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源.当多个线程同时访问同一个资源,并且其中的一个或者多个线程对这个资源进行了写操作,才会产生竞态条件.多个线程 ...

  7. JavaScript基础笔记(三) 引用类型

    引用类型 引用类型的值(对象)是引用类型的一个实例. 一.Object类型 创建Object实例: //方法一:通过new操作符创建 var a = new Object(); a.neme = &q ...

  8. git从其他分支提取文件merge到当前分支

    git checkout A -- [a.go b.go]将A分支中的a.go, b.go两文件合并到当前分支注意:会将当前分支的对应文件强行覆盖

  9. 【三边定位】 演示程序V0.1

    忙于工作,这个小东西一直没有空去弄, 最近简单修改了些算法, 精度还有待提高. 贴一张图片 坐上角的坐标是鼠标点(31,17),后面location 是三边定位算出来的(31,19),后面跟的erro ...

  10. [CF536D]Tavas in Kansas

    [CF536D]Tavas in Kansas 题目大意: 一张\(n(n\le2000)\)个点,\(m(m\le10^5)\)条边的无向带权连通图(权值可以为负).A.B两人分别在\(s,t\)点 ...