解决Visual Studio设置C++标准 但是_cplusplus始终为199711


场景复现

我在VS2022偶然的一次测试C++标准开发环境,发现无论我怎么修改C++语言标准,输出的__cplusplus宏总是199711
在这里插入图片描述

Visual Studio官方说明

链接:https://learn.microsoft.com/zh-cn/cpp/build/reference/zc-cplusplus?view=msvc-170&viewFallbackFrom=vs-2022

注解
__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 相同的值。

C++标准对应表

c++__cplusplus
std::c++98199711
std::c++11201103
std:c++14201402L/201300
std:c++17201703L
std:c++20202002L

解决方案

方法一 恢复__cplusplus宏

在 Visual Studio 中设置此编译器选项,打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
选择“配置属性”>“C/C++”>“命令行”属性页。将 /Zc:__cplusplus 或 /Zc:__cplusplus- 添加到“附加选项:”窗格中。。

方法二 使用_MSVC_LANG宏

我们只需要将之前的__cplusplus宏替换为_MSVC_LANG即可。
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林夕07

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值