Visual Studio下__cplusplus宏为199711L的问题

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中设置此编译器选项

  1. 打开项目的“ 属性页”对话框。 有关详细信息,请参阅在Visual Studio中设置C ++编译器和构建属性

  2. 选择“ 配置属性” >“ C / C ++” >“ 命令行”属性页。

  3. / Zc:__ cplusplus/ Zc:__ cplusplus-添加其他选项:窗格。

参考:

1./ Zc:__ cplusplus(启用更新的__cplusplus宏)


2.VS2017下__cplusplus宏为199711L的问题

posted @ 2019-09-06 15:28  余生以学  阅读(1733)  评论(0编辑  收藏  举报