VS中添加预处理宏的方法

除了在.c及.h中添加宏定义之外,还可以采用如下方法添加宏定义:

1、若只需要定义一个宏(如#define DEBUG),可以右键 点击 工程-->属性-->c/c++-->预处理器-->预处理器定义,点击下拉框中的编辑,输入想要定义的宏;

2、如果还需要定义宏的内容(如#define inline __inline),可以右键 点击 工程-->属性-->c/c++-->命令行,在其它选项中输入如下内容: /D"inline"=__inline 。


Visual Studio 2013 预定义的宏

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

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




__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 为生成号。




__cplusplus_cli



当使用 /clr /clr:pure /clr:safe 编译时定义。 __cplusplus_cli 的值是整数文本 200406。 __cplusplus_cli 的效力范围是整个翻译单元。




__cplusplus_winrt



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



__COUNTER__



扩展成一个以 0 开始的整数文本,该整数每次用于源文件或源文件包含的标头时增加 1。 当你使用预编译标头时, __COUNTER__ 会记住其状态。

下面的示例使用 __COUNTER__,将唯一标识符分配到同一类型的三个不同的对象。

首先,假设以下类定义。 构造函数将一个整数作为参数。

C++


在主窗格中,应用程序声明类型为 exampleClass 的三个对象,并将 __COUNTER__ 用作唯一标识符参数。

C++



__cplusplus



仅定义 C++ 程序。



_CPPRTTI



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



_CPPUNWIND



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



_DEBUG



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



_DLL



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



__FUNCDNAME__



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

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

下面的示例使用 __FUNCDNAME__、__FUNCSIG__ 和 __FUNCTION__ 宏来显示函数信息。

C++



__FUNCSIG__



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

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

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

有关示例,请参见 __FUNCDNAME__。



__FUNCTION__



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

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

有关示例,请参见 __FUNCDNAME__。



_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 规范日期的整数文本。




_VC_NODEFAULTLIB



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



_WCHAR_T_DEFINED



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



_WIN32



定义 Win32 和 Win64 的应用程序。 始终定义。



_WIN64



定义为Win64应用程序。


参考文献: 1、​ ​宏 (C/C++)​

2、​ ​预处理器运算符​

3、​ ​预处理器指令​

4、​ ​预定义的宏​