在main.cpp定义_WIN32_WINDOWS后仍收编译警告,求解决方案
解决Windows版本宏定义的编译警告问题
问题原因
你的代码存在两个关键问题:
- 宏定义顺序错误:应该先定义版本宏,再包含
<SDKDDKVer.h>——该头文件会读取你定义的版本宏来配置Windows SDK版本,反过来写会导致头文件无法识别你后续定义的宏。 - 版本宏使用不当:
_WIN32_WINDOWS是针对Windows桌面系统的旧宏,现在更推荐直接定义_WIN32_WINNT来指定目标Windows版本,且你的写法把_WIN32_WINNT_WIN10赋值给_WIN32_WINDOWS,逻辑上不符合编译器的预期。
修正后的代码
将代码调整为以下形式,确保宏定义在头文件包含之前:
#ifdef _WIN64 #define _WIN32_WINNT _WIN32_WINNT_WIN10 // 直接定义目标Windows 10的版本宏 #include <SDKDDKVer.h> #elif _WIN32 #error "Build only supports x86-64 and does not support x86" #endif // _WIN64
额外验证方案
如果调整后仍有警告,建议直接在项目的预处理器定义中添加版本宏:
- 对于Visual Studio:右键项目→属性→C/C++→预处理器→预处理器定义,添加
_WIN32_WINNT=0x0A00(0x0A00就是Windows 10的版本值,和_WIN32_WINNT_WIN10等价) - 对于命令行编译:添加编译参数
-D_WIN32_WINNT=0x0A00
这样能确保所有源文件都统一使用指定的Windows版本目标,避免单个文件定义顺序导致的问题。
内容的提问来源于stack exchange,提问作者Dark Sorrow
相关产品推荐
相关产品推荐

