预处理器定义
🤦♀️ Microsoft 专用预定义宏
MSVC 支持以下预定义宏:
-
_WIN32
:当编译目标为 32 位 ARM、64 位 ARM、x86 或 x64 时,定义为 1。 其他情况下则不定义。 -
_WIN64
:当编译目标为 64 位 ARM 或 x64 时,定义为 1。 其他情况下则不定义。
注意区分另一个宏 WIN32
,它是在Windows头文件 minwindef.h
中定义的,我们也可以在 Visual Studio 的 预处理器定义
中进行定义,其配置后会生效在xxx.vcxproj 文件中,其Visual Studio命令行参数 /D
与源代码文件开头的 #define
指令具有相同的效果。默认情况下,与符号关联的值为 1。
综上所述, _WIN32
和 WIN32
在Visual Studio 控制台应用程序中, 都可以使用,但是,_WIN32
可用范围更广一些,更安全,更适合用来判断Windows平台,毕竟其是在MSVC编译器中进行了预定义。
经过测试, MSVC 和 MinGW-W64 都有预定义宏 _WIN32
,linux-gnu g++ 无。
🤦♂️ 在 Visual Studio 开发环境中设置预处理器定义选项
- 打开项目“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
- 选择 "配置属性" " > c/c + + > 预处理器" 属性页。
- 打开 " 预处理器定义 " 属性的下拉菜单,然后选择 " 编辑"。
- 在 " 预处理器定义 " 对话框中,添加、修改或删除一个或多个定义,每行一个或多个定义。 选择“确定”以保存更改 。
不需要在此处指定的定义上包含 "/D" 选项前缀。 在属性页中,定义由分号分隔 (;
) 。
编辑后会生效在xx.vcxproj 文件中。
Reference
/D (Preprocessor Definitions) | Microsoft Docs
VS中添加预处理宏的方法 - rainbow70626
VS2010中属性页中,C/C++ -->预处理器定义
WIN32和_WIN32的区别、
c preprocessor - What's the difference between the WIN32 and _WIN32 defines in C++ - Stack Overflow