当前位置: 首页 > news >正文

不同版本gcc、g++的默认支持的std C++标准

GNU的gcc、g++编译器的版本和它们支持的C++标准并不是一回事。

例如,gcc/g++有4、5、6、7、8、9、10、11版本,它们支持的C++标准可能是c++98、c++11、c++14、c++17,而且有时一个gcc版本可以通过-std=c++14选项,支持多个C++标准.

例如,g++-9可以支持c++98到c++14,g++-11可以支持c++98到c++14。

而g++-9默认支持的标准是c++14,g++-11默认支持的标准是c++17,默认支持C++标准的不同,可能导致低版本编译器可以编译的代码,在高版本(编译器)不能编译。

尽管在g++-11编译时,可以添加编译选项 -std=c++14,让g++-11编译器按照C++14的标准来向下兼容,但最好有办法可以知道不同版本gcc编译器支持的默认C++标准。

网上有篇文章通过程序检测gcc编译器支持的默认C++标准,亲自试过非常好用:

【经验】如何查看gcc、g++不加-std时的默认版本_gun gcc std选项-CSDN博客

我主要是用C++的代码:gcc编译器有个__cplusplus宏,这个宏是个字符串,这个字符串值与它正在使用的的C++标准是有联系的,但是仅仅从字符串比较难看出gcc编译所使用的C++标准,而且当编译时指定-std=选项时,这个宏就会改变,表示当前编译所使用的C++标准,一个版本gcc一般会支持多种C++标准,但是有个默认标准,就是不使用-std选项时__cplusplus宏的值。

#include <iostream>int main(void) {
#ifdef __cplusplusstd::cout << "__cplusplus = " << __cplusplus << std::endl;
#endif
#ifdef __STRICT_ANSI__std::cout << "__STRICT_ANSI__ = " << __STRICT_ANSI__ << std::endl;
#endifreturn 0;
}

用下面的shell脚本编译上面的代码,分别使用不同标准,每次编译,打印使用的C++标准和对应的__cplusplus宏的值,最后不使用-std选项编译一次,所打印的__cplusplus宏,根据前面的对应关系,就可知道默认使用的C++标准。

for std in c++98 c++11 c++14 c++17 gnu++98 gnu++11 gnu++14 gnu++17; doecho $stdg++-9 -std=$std -o cpp.out cpp.cpp./cpp.outecho
done
echo default
g++-9 -o cpp.out cpp.cpp
./cpp.out


http://www.mrgr.cn/news/5335.html

相关文章:

  • 视频智能分析工业排污检测算法及算法源码全套应用方案
  • Rust web框架介绍一
  • 理解List AbstractList ArrayList
  • git常见问题
  • 2024-01-开发技术积累
  • 攻防世界-web题型-2星难度汇总-个人wp
  • MTK 5G旗舰智能手机SoC芯片——MT6989(天玑9300)
  • 排序之插入排序
  • 远程服务器文件和本地文件同步的一个方法
  • pytorch 快速入门-方法篇
  • [LeetCode]438.找到字符串中所有字母异位词(C++)
  • 32次8.21(学习playbook-roles,脚本创建数据库和表,mycat读写分离)
  • 教你一键快速生成词云图片
  • 双向通信之Websocket
  • LeetCode 算法:划分字母区间 c++
  • MySQL: find_in_set基本使用
  • 发布MindSearch到ModelScope创空间
  • 线程的锁机制
  • 利用puppeteer将html网页生成图片
  • 网络编程