Visual Studio下__cplusplus宏為199711L的問題
/ Zc:__ cplusplus(啟用更新的__cplusplus宏)
該/ ZC:__ CPLUSPLUS編譯器選項使__cplusplus預處理宏為最近C ++語言標准的支持報告的更新值。 默認情況下,Visual Studio始終為__cplusplus預處理器宏返回值“199711L” 。
句法
/ Zc:__ cplusplus [ - ]
備注
所述__cplusplus預處理宏通常用來報告用於C ++標准的特定版本的支持。 由於許多現有代碼似乎依賴於此宏匹配“199711L”的值,因此編譯器不會更改宏的值,除非您使用/ Zc:__ cplusplus編譯器選項明確選擇加入。該/ ZC:__ CPLUSPLUS選項可用在Visual Studio 2017年開始15.7版本,並且默認是關閉的。在早期版本的Visual Studio中,默認情況下,或者如果指定了/ Zc:__ cplusplus-,Visual Studio將為__cplusplus預處理器宏返回值“199711L” 。該/ permissive- 選項不啟用/ Zc:__ cplusplus。
當/ ZC:__ CPLUSPLUS啟用選項,則所報告的值__cplusplus宏依賴於/ STD版開關設置。 此表顯示宏的可能值:
/ Zc:__ cplusplus開關 | / std:c ++開關 | __cplusplus值 |
---|---|---|
Zc:__ cplusplus | / std:c ++ 14(默認) | 201402L |
Zc:__ cplusplus | / STD:C ++ 17 | 201703L |
Zc:__ cplusplus | / STD:C ++最新 | 201704L |
Zc:__ cplusplus-(禁用) | 任何價值 | 199711L |
未標明 | 任何價值 | 199711L |
編譯器不支持C ++ 98,C ++ 03或C ++ 11的標准交換機。
要更精細地檢測編譯器工具集的更改,請使用_MSC_VER預定義宏。 對於Visual Studio 2017及更高版本中的每個工具集更新,此內置宏的值都會遞增。無論/ Zc:__ cplusplus選項是啟用還是禁用,_MSVC_LANG預定義宏都會報告標准版本。當/ Zc:__ cplusplus啟用時,。 __cplusplus == _MSVC_LANG
在Visual Studio中設置此編譯器選項
-
打開項目的“ 屬性頁”對話框。 有關詳細信息,請參閱在Visual Studio中設置C ++編譯器和構建屬性。
-
選擇“ 配置屬性” >“ C / C ++” >“ 命令行”屬性頁。
-
將/ Zc:__ cplusplus或/ Zc:__ cplusplus-添加到其他選項:窗格。
參考: