VS中添加预处理宏的方法
来源:互联网 发布:淘宝编辑图片软件 编辑:程序博客网 时间:2024/06/07 07:01
VS中添加预处理宏的方法
除了在.c及.h中添加宏定义之外,还可以采用如下方法添加宏定义:
1、若只需要定义一个宏(如#define DEBUG),可以右键点击工程-->属性-->c/c++-->预处理器-->预处理器定义,点击下拉框中的编辑,输入想要定义的宏;
2、如果还需要定义宏的内容(如#define inline __inline),可以右键点击工程-->属性-->c/c++-->命令行,在其它选项中输入如下内容: /D"inline"=__inline 。
Visual Studio 2013 预定义的宏
列出预定义的 ANSI/ISO C99 和 Microsoft C++ 实现预处理宏。
编译器识别预定义的 ANSI/ISO C99 C 预处理宏,Microsoft C++ 实现将提供更多宏。 这些预处理器宏不带参数,并且不能重新定义。 本文中所列的一些预定义宏用多个值进行定义。
宏
说明
__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 的整数。
宏
说明
_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: /clrusing 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 IDexampleClass::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 0exampleClass e1(__COUNTER__);// having been referenced, __COUNTER__ is now defined as 1exampleClass e2(__COUNTER__);// __COUNTER__ is now defined as 2exampleClass 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应用程序。
- VS中添加预处理宏的方法
- vs中添加预处理宏的方法
- VS中添加预处理宏的方法
- 在VS中添加lib的方法
- VS中添加命令行参数的方法
- 在VS中添加lib的第三种方法
- 在VS中添加lib的第三种方法
- 在VS中添加lib的4种方法
- 在VS中添加lib的第三种方法
- 在VS中添加lib的三种方法
- vs中添加lib的三种方法
- 在VS中添加lib的第三种方法
- 在VS中添加lib的三种方法
- 在VS中添加lib的第三种方法
- 在VS中向命令行添加参数的方法
- vs项目中添加lib库的方法总结
- 在VS中向命令行添加参数的方法
- 在VS中添加lib库的三种方法
- 研发项目的人员组成
- ORA-28040: No matching authentication protocol
- Windows 7 64位 下用QT5.7连接MySQL 教程
- 使用maven构建工具制作验证码
- 源码编译安装http2.4
- VS中添加预处理宏的方法
- 4种PHP异步执行的常用方式
- FastJSON、Gson和Jackson性能对比和共同缺点,注意事项
- 蓝桥杯练习----入门训练 圆的面积
- main-bower-files <gulp插件>
- win10 下 c++遍历文件夹
- React native Model组件的使用
- File类
- PHP设计模式之装饰模式