不同版本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++17。

而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 __cplusplus
	std::cout << "__cplusplus = " << __cplusplus <&
### ar、gccg++ 工具的使用区别及场景 #### ar 工具介绍 `ar` 是一种用于创建、修改和提取静态库(`.a` 文件)的工具。它主要用于打包多个目标文件到一个单一的档案文件中,以便于管理和分发。 - **命令格式** ```bash ar rcs libmylib.a file1.o file2.o ... ``` - **功能特点** `ar` 不会重新编译源码,只负责管理已有的 `.o` 文件。通过这种方式,开发者能够更方便地维护大型项目中的依赖关系[^1]。 #### gcc 工具介绍 `gcc` (GNU Compiler Collection) 主要用来编译 C 语言程序,默认情况下也会处理其他几种编程语言如 Objective-C 或 Ada 等。对于C++代码,则通常推荐使用专门针对该语言优化过的 `g++`. - **基本用法** - 单步操作模式下支持四个阶段:预处理(`-E`)、编译成汇编(`-S`)、组装为目标文件(`-c`)以及最终链接生成可执行文件。 ```bash gcc source.c -o output_program ``` - **特性优势** 支持多种平台架构下的交叉编译;拥有丰富的警告提示机制帮助发现潜在错误;兼容ANSI/ISO标准的同时还提供了许多有用的扩展语法[^4]. #### g++ 工具介绍 作为 GNU 版本C++ 编译器,`g++` 自动设置好必要的头文件路径并链接相应的运行时库,使得编写纯正的 C++ 应用变得简单快捷. - **典型应用案例** 当涉及到模板类、异常处理等功能时,应该优先考虑采用此工具链来进行开发工作. ```cpp // example.cpp #include <iostream> using namespace std; int main(){ cout << "Hello from GPP!" << endl; return 0; } ``` 只需一条指令即可完成整个构建流程: ```bash g++ example.cpp -o hello_gpp ``` - **特别说明** 如果尝试用普通的 `gcc` 来代替 `g++`,可能会遇到找不到某些特定于 C++ 的函数定义等问题,因为后者已经预先配置好了所有必需项[^3]. #### 场景对比总结表 | 工具 | 主要用途 | 关键差异 | | --- | ------ | --------| | ar | 创建与管理静态库(.a)|不涉及实际编译过程,专注于归档对象文件 | | gcc | 处理多门不同类型的高级语言源码(C为主),直至产出最终产物 | 能够识别更多种输入格式,并提供广泛的编译选项 | | g++ | 针对现代C++特性的高效解决方案 | 默认启用STL及其他核心组件的支持,简化复杂项目的搭建 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值