cc、gcc、g++、CC的区别概括

本文详细阐述了gcc、g++、cc及CC之间的区别,包括它们的历史背景、使用场景及常见误区,帮助读者理解这些编译器在C/C++开发中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ccgccg++CC的区别概括

 

       gccC编译器;g++C++编译器;linuxcc一般是一个符号连接,指向gccgccg++都是GUN(组织)的编译器。而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Linux/Unix都是大小写敏感的系统,这点一定要注意。

ccUnix系统的C Compiler,而gcc则是GNU Compiler CollectionGNU编译器套装。gcc原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(CC++Objective-CAdaFortranJava)。因此,它们是不一样的,一个是古老的C编译器,一个是GNU编译器集合,gcc里面的C编译器比cc强大多了,因此没必要用cc

下载不到cc的原因在于:cc来自于昂贵的Unix系统,cc是商业软件。

Linux下的ccgcc符号连接,可以通过$ls –l /usr/bin/cc来简单察看,该变量是make程序的内建变量,默认指向gcccc符号链接和变量存在的意义在于源码的移植性,可以方便的用gcc来编译老的用cc编译的Unix软件,甚至连makefile都不用改在,而且也便于Linux程序在Unix下编译。

 

误区一:gcc只能编译C代码,g++只能编译C++代码。

两者都可以,但请注意:

1)后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是C++程序,注意,虽然C++C的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。

2)编译阶段,g++会调用gcc,对于C++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。

 

误区二:gcc不会定义__cplusplus宏,而g++

实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。

 

误区三:编译只能用gcc,链接只能用g++

严格来说,这句话不算错误,但是它混淆了概念,应该这样说:编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。

 

C++的编译器肯定可以编译C的代码,注意除了C++C的语法扩充之外,编译和链接CC++的标准库通常也不一样呢,用gcc而非g++也编译了C++的程序就证明了这一点。

<think>嗯,用户想了解GCC、G++以及g++-11之间的区别,还有版本特性、编译器选项等。首先,我需要回忆一下GCC和G++的基本概念。根据引用[2],GCC是GNU编译器集合,而G++是其中的C++编译器驱动。也就是说,GCC是一个大的集合,包括C、C++、Fortran等语言的编译器,而G++专门处理C++代码。 接下来,用户提到g++-11,这应该是特定版本的G++,比如GCC 11.x中的G++。需要解释不同版本之间的差异,比如C++标准的支持、新特性、优化选项等。引用[4]提到VS2010对C++11的支持,可能类似地,G++的不同版本也会支持不同的C++标准。例如,g++-11可能默认使用C++17或更高标准,而旧版本可能默认使用C++14或更早。 然后,编译器选项方面,不同的版本可能有不同的默认选项,或者新增了一些优化标志。比如,g++-11可能支持更多的警告选项或新的优化技术。需要查阅相关资料确认这些细节。 还要注意用户可能混淆了GCC和G++。根据引用[1],GCC原本是GNU C编译器,但现在作为编译器集合,而G++专用于C++。因此,当编译C++代码时,使用g++会更合适,因为它会自动链接C++标准库,而gcc可能需要手动指定链接库,如引用[1]和[2]所述。 另外,用户可能遇到的问题如引用[3]中的安装错误,缺少g++-6,这说明不同版本的g++可能需要单独的安装包。在Linux系统中,g++-11可能是通过不同的软件包名称提供的,比如g++-11,而默认的g++可能指向较旧的版本。 总结一下,回答需要分点说明GCC与G++的区别,G++不同版本(如g++-11)的特性差异,以及编译器选项的变化。同时要引用提供的资料来支持这些观点,并确保LaTeX格式正确,行内公式用$...$,独立公式用$$...$$。</think>### GCC、G++与g++-11的差异解析 #### 1. **GCC与G++的核心区别** - **GCC**(GNU Compiler Collection)是一个编译器集合,支持多种编程语言(C、C++、Fortran等)[^2]。 - **G++** 是GCC中专门用于编译C++代码的驱动程序,自动调用C++编译器(如`cc1plus`)并链接C++标准库(如`libstdc++.so`)[^1][^2]。 **关键区别**: - 编译C++代码时,`gcc`需手动指定链接库(例如`-lstdc++`),而`g++`自动完成这一过程。 - 示例命令差异: ```bash gcc main.cpp -lstdc++ # 需要显式链接C++库 g++ main.cpp # 自动处理链接 ``` #### 2. **g++与g++-11的版本差异** - **g++** 通常是系统默认的G++版本,具体取决于发行版(如Ubuntu 20.04默认g++-9)。 - **g++-11** 是GCC 11.x系列的C++编译器,提供更新的语言特性和优化。 **特性对比**: | 特性 | g++(旧版,如9.x) | g++-11(GCC 11.x) | |---------------------|-------------------|-------------------| | C++标准默认支持 | C++14 | C++17 | | C++20特性支持 | 部分(如概念) | 更多(如模块、协程)| | 新警告选项 | 较少 | 新增`-Wmisleading-indentation` | | 优化选项 | `-O2`为基础 | 改进的`-O3`向量化优化 | #### 3. **编译器选项与版本管理** - **指定C++标准**: ```bash g++-11 -std=c++20 main.cpp # 强制使用C++20模式 ``` - **版本切换**(以Ubuntu为例): ```bash sudo apt install g++-11 # 安装特定版本[^3] update-alternatives --config g++ # 切换默认版本 ``` #### 4. **应用场景** - **G++-11适用场景**: - 需要使用C++17/C++20新特性(如结构化绑定、概念约束)。 - 依赖新版标准库功能(如`std::format`)。 - 需要更严格的静态检查或优化性能(如改进的循环优化[^4])。 - **经典G++适用场景**: - 兼容旧代码(如传统C++98项目)。 - 避免新版编译器引入的行为变更(如模板解析规则)。 --- ### 相关问题 1. 如何查看当前系统中安装的G++版本? 2. GCC编译器如何支持C++20协程? 3. 在Linux系统中如何同时安装多个G++版本? 4. 使用`gcc`编译C++代码时出现链接错误应如何解决? --- 通过版本管理和特性适配,开发者可以灵活选择编译器版本以平衡兼容性与新功能需求。例如,若项目依赖C++20的模块特性,则必须使用g++-11或更高版本[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值