You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

g++ 10.3.0下__cplusplus宏显示201402L异常原因咨询

原因说明

__cplusplus宏的取值仅和编译时指定的C++语言标准参数绑定,和GCC自身的版本号没有直接对应关系,该现象是GCC默认配置导致的正常结果,不属于环境异常。

  • GCC 10.x系列版本的默认C编译标准为C14(实际默认启用带GNU扩展的gnu++14模式),对应__cplusplus宏的取值就是201402L,和观测到的结果完全匹配。
  • GCC直到11大版本才将默认C编译标准从C14切换为C17,即GCC 11及后续版本不加特殊编译参数时,__cplusplus的默认取值才会变为对应C17的201703L。
调整方式

如果需要使用更高版本的C++标准,编译时手动追加标准指定参数即可:

  • 启用C++17:添加-std=c++17编译参数,此时__cplusplus取值为201703L
  • 启用C++20:添加-std=c++20编译参数,此时__cplusplus取值为202002L
  • 如果需要使用带GNU自定义扩展的标准版本,可将参数替换为-std=gnu++17、-std=gnu++20,该调整不会改变__cplusplus宏的对应取值。

可通过以下命令验证不同参数下的宏取值:

# 查看默认配置下的__cplusplus值
echo | g++ -dM -E -x c++ - | grep __cplusplus

# 查看指定C++17标准时的__cplusplus值
echo | g++ -std=c++17 -dM -E -x c++ - | grep __cplusplus

内容的提问来源于stack exchange,提问作者Spin。

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:42:17