VS2013 预定义的宏

时间:2023-01-16 13:15:23

Visual Studio 2013 预定义的宏

列出预定义的 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 数组形式返回封闭函数的未限定和未修饰名称。

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

__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

其中,

  • 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
}

__cplusplus_winrt

当使用 /ZW 选项来编译时定义。 __cplusplus_winrt 的值是整数文本 201009。

__COUNTER__

扩展成一个以 0 开始的整数文本,该整数每次用于源文件或源文件包含的标头时增加 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

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

_DEBUG

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

_DLL

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

__FUNCDNAME__

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

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

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

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

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

在 64 位操作系统上,调用约定默认为 __cdecl。

有关示例,请参见 __FUNCDNAME__。

__FUNCTION__

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

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

有关示例,请参见 __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

为面向 x86 处理器的编译进行定义。 这不是为 x64 处理器定义的。

_M_ARM_FP

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

  • 在 30-39 的范围内,如果未指定 /arch ARM 选项,则表明使用的是 ARM 的默认体系结构(VFPv3)。

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

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

_M_IX86_FP

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

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

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

  • 2(如果使用了 /arch:SSE2/arch:AVX 或 /arch:AVX2)。 如果未指定 /arch 值,则该值为默认值。 当指定 /arch:AVX时,也定义了宏 __AVX__。 当指定 /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

在使用 /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 规范日期的整数文本。

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

定义为Win64应用程序。

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

  1. C标准中一些预定义的宏

    C标准中指定了一些预定义的宏,对于编程经常会用到.下面这个表中就是一些常常用到的预定义宏. 宏(双下滑线) 意义 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串文字) __ ...

  2. visual c&plus;&plus;中预定义的宏

    一.主要目标 (由于visual studio通常包含很多开发环境,通常将其中c/c++的ide称为visual c++ 20xx) 整理下visual c++ 2010下预定义的宏.做一下备忘和了解 ...

  3. C标准中一些预定义的宏,如&lowbar;&lowbar;FILE&lowbar;&lowbar;,&lowbar;&lowbar;func&lowbar;&lowbar;等

    C标准中一些预定义的宏 C标准中指定了一些预定义的宏,对于编程经常会用到.下面这个表中就是一些常常用到的预定义宏. 宏 意义 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串 ...

  4. ARM编译器中预定义的宏

    arm系列目前支持三大主流的工具链,realview的armcc,iar ewarm的iccarm,gnu的gcc,编译器在编译的时候会预定义一些宏,这些宏在工程中起到不可或缺的作用. 例如 /* d ...

  5. 2019-8-31-dotnet-新项目格式与对应框架预定义的宏

    title author date CreateTime categories dotnet 新项目格式与对应框架预定义的宏 lindexi 2019-08-31 16:55:58 +0800 201 ...

  6. dotnet 新项目格式与对应框架预定义的宏

    在 sdk style 的项目格式支持使用多框架开发,此时需要在代码里面通过宏判断,在编译的时候执行不同的代码.本文告诉大家在框架里面对应的预定义的条件编译符有哪些 在让一个 csproj 项目指定多 ...

  7. gcc中预定义的宏&lowbar;&lowbar;GNUC&lowbar;&lowbar;

    转载:gcc中预定义的宏__GNUC__ - Cccarl - 博客园 (cnblogs.com) 今天在看Linux系统编程这本书的代码的时候看到了__GNUC__,不太清楚这个宏所以去查了一下,以 ...

  8. C&sol;c&plus;&plus;几个预定义的宏:&lowbar;&lowbar;DATE&lowbar;&lowbar;&comma;&lowbar;&lowbar;TIME&lowbar;&lowbar;&comma;&lowbar;&lowbar;FILE&lowbar;&lowbar;&comma;&lowbar;&lowbar;LINE&lowbar;&lowbar;

    一边情况下,C/C++编译器会内置几个宏,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息. ANSI C标准中有几个标准预定义宏(也是常用的): __ ...

  9. Android CPU类型及预定义的宏

    [时间:2019-02] [状态:Open] [关键词:android,cpu, armeabi, armeabi-v7a, arm64-v8a, 32位,64位,c/c++] 本文主要总结下前段时间 ...

随机推荐

  1. java 集合(Set1)

    ----------------|Collection(为什么要画这个图?学多了之后该忘了) --------------------------|List --------------------- ...

  2. TDD中的迭代

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:TDD中的迭代.

  3. jersey构建rest服务返回json数据

    1.  eclipse 创建 dynamic web project 2.  将jersey相关jar包放到libs目录下 3. web.xml 增加 jersey 相关内容 <?xml ver ...

  4. larbin是一种开源的网络爬虫&sol;网络蜘

    larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien Ailleret独立开发.larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源.Lar ...

  5. d指针在Qt上的应用及实现

    Qt为了使其动态库最大程度上实现二进制兼容,引入了d指针的概念.那么为什么d指针能实现二进制兼容呢?为了回答这个问题,首先弄清楚什么是二进制兼容?所谓二进制兼容动态库,指的是一个在老版本库下运行的程序 ...

  6. Xamarin&period;Android 关于so包报错问题

    问题描述:使用so包时报错. 解决方法: 1.保证 libs > armeabi 和 armeabi-v7a 中的so包一致. 2.去掉 x86,x86_64,arm64-v8a. 3. so的 ...

  7. Nginx禁止直接通过IP地址访问网站以及限制IP登陆某目录&lpar;关闭默认站点或空主机头&rpar;

    这篇文章主要介绍了Nginx中禁止使用IP访问网站的配置实例,一般在备案时可能需要这种设置,需要的朋友可以参考下   国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问 ...

  8. 20181204-2 Final发布

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2476 小组介绍 组长:付佳 组员:张俊余 李文涛 孙赛佳 田良 于洋 段 ...

  9. JSP中的一个树型结构

    看方力勋的javaWeb,采用左右值来表示树型结构(就是俺门的多级分类)表结构 页面代码 <%@ page language="java" import="java ...

  10. Java并发编程(六)原子性与易变性

    原子性 原子是最小单元.不可再分的意思.原子性是指某个操作在获取CPU时间时,要么就给它足够时间,让这个操作执行完,要么就不执行这个操作,执行时不能出现上下文切换(把CPU时间从一个线程分配到另一个线 ...