微软这个坑货,白瞎我一早上。

问题复现

用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
大致意思如下:

  1. 从vs2017 15.5开始默认开启这个选项
  2. 开启这个选项后,SDK (10.0.16299.0)之前的sdk版本的头文件会编译失败

工程里面选不同的sdk版本,windows.h头文件就属于不同版本的sdk,老的就会编译失败。微软这坑货

posted on 2020-06-18 13:57  ConfuciusPei  阅读(1988)  评论(0编辑  收藏  举报