在将旧的 C++ 项目从 Visual Studio 6 迁移到 Visual Studio 2012 时,我们在标准 Microsoft 平台标头中遇到了一组奇怪的警告:
- 警告 C4005:“__useHeader”:宏重新定义
- 警告 C4005:“__on_failure”:宏重新定义
在线搜索仅发现其他几个人遇到此错误。在某些情况下,有人试图使用 VS2012 来编译旧版 DirectX 代码——我没有这样做。在其他情况下,有人试图使用 VS2012 来针对 Windows XP(使用更新 1 中的新选项)——我正在这样做。
DirectX 问题已得到回答,警告将始终存在,告诉您正在使用过时的(Win8 之前)版本的 DirectX 进行编译,您只需要忍受它。
没有回答 Windows XP 的问题。其他人只是说他们无法重现该问题。
我复制了它,并找到了原因,我在这里写下它以帮助遇到此问题的其他人。
原文由 Jeff B 发布,翻译遵循 CC BY-SA 4.0 许可协议
进入项目属性,找到“预处理器定义”字段。
除了默认和添加的定义常量之外,您还应该看到一个宏:
这个宏显然引入了一些额外的编译器提供的预处理器定义。我不确定 Visual Studio 的哪个版本引入了这个宏,但它在 Visual Studio 6 _中没有_。
在 Visual Studio 2012 中,此宏 需要 出现在项目的预处理器定义字段中。在早期版本的 Visual Studio 中也可能需要它,但我没有测试过这些。
如果缺少此宏,您将看到如上所示的错误消息。