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。
相关产品推荐
相关产品推荐

