微軟這個坑貨,白瞎我一早上。
問題復現
用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,老的就會編譯失敗。微軟這坑貨