/Zc:__cplusplus(启用更新的 __cplusplus 宏)

/Zc:__cplusplus 编译器选项启用 __cplusplus 预处理器宏以针对最新的 C++ 语言标准支持报告更新的值。 默认情况下,Visual Studio 始终为 __cplusplus 预处理器宏返回值 199711L

语法

]$

注解

__cplusplus 预处理器宏通常用于报告 C++ 标准特定版本的支持。 因为很多现有代码需要此宏的值与 199711L 匹配,所以编译器不会更改此宏的值,除非通过使用 /Zc:__cplusplus 编译器选项进行显式选择。 从 Visual Studio 2017 版本 15.7 开始便已提供 /Zc:__cplusplus 选项,该选项在默认情况下处于禁用状态。 在早期版本的 Visual Studio 中,在默认情况下或者在指定了 /Zc:__cplusplus- 的情况下,Visual Studio 针对 199711L 预处理器宏返回值 __cplusplus/permissive- 选项不启用 /Zc:__cplusplus

启用 /Zc:__cplusplus 选项后,__cplusplus 宏报告的值取决于 /std 版本选项设置。 下表列出了该宏的可能值:

/Zc:__cplusplus 选项 /std 选项 __cplusplus
Zc:__cplusplus /std:c++14(默认值) 201402L
Zc:__cplusplus /std:c++17 201703L
Zc:__cplusplus /std:c++20 202002L
Zc:__cplusplus /std:c++latest 查看文本
Zc:__cplusplus-(已禁用) 任何值 199711L
未指定 任何值 199711L

编译器不支持 C++98、C++03 或 C++11 的标准选项。 从 Visual Studio 2019 版本 16.11 开始,/std:c++20 选项可用。 /std:c++latest 选项的 __cplusplus 值取决于 Visual Studio 的版本。 它始终比 Visual Studio 版本支持的最高支持标准值 __cplusplus 至少高 1。

若要更精细地检测对编译器工具集的更改,请使用 _MSC_VER 预定义宏。 此内置宏的值会随 Visual Studio 2017 和更高版本中的每个工具集更新而增加。 _MSVC_LANG 预定义宏向标准版本报告 /Zc:__cplusplus 是启用还是禁用状态。 启用 /Zc:__cplusplus 后,__cplusplus 具有与 _MSVC_LANG 相同的值。

在 Visual Studio 中设置此编译器选项

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

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

  3. /Zc:__cplusplus/Zc:__cplusplus- 添加到“附加选项:”窗格中。

另请参阅

/Zc(一致性)
/std(指定语言标准版本)
预定义宏