微软这个坑货,白瞎我一早上。
问题复现
用vs2019创建一个工程,然后修改windows sdk 到8.1;结果现有代码就编译不通过了,出现以上错误。
使用排除法,缩小问题,最终排除到编译一个仅仅包含#include <windows.h>一行代码的cpp文件也会出问题。
同样的代码,现有工程没问题,新创建的就有问题。
然后开始对比,属性页的各种设置。最后发现有一个不一样。
property -> c/c++ -> language -> conformance mode
修复
以上属性设置为no,问题就消失了。
原因
这个编译选项的官方文档:https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance?view=vs-2019
大致意思如下:
- 从vs2017 15.5开始默认开启这个选项
- 开启这个选项后,SDK (10.0.16299.0)之前的sdk版本的头文件会编译失败
工程里面选不同的sdk版本,windows.h头文件就属于不同版本的sdk,老的就会编译失败。微软这坑货