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-添加到其他选项:窗格。
参考: