博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编译器 cc、gcc、g++、CC 的区别
阅读量:6921 次
发布时间:2019-06-27

本文共 1128 字,大约阅读时间需要 3 分钟。

gcc 是GNU Compiler Collection,原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(C、C++、Objective-C、Ada、Fortran、 Java),可以说gcc是GNU编译器集合。

g++ 是C++编译器。

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

CC 则一般是 makefile 里面的一个名字标签,即宏定义,表示采用的是什么编译器(如:CC = gcc)。

 

误区一: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的语法扩充之外,编译和链接C和C++的标准库通常也不一样呢,用gcc而非g++也编译了C++的程序就证明了这一点。

 

注:符号链接是一种特殊类型的文件,它的内容只是一个字符串。它可能指向一个存在的文件也可能什么都不指向。当您在命令行或程序里提到符号链接的时候,您实际上进入了它指向的文件,前提是这个文件是存在的。

转载地址:http://aehcl.baihongyu.com/

你可能感兴趣的文章
BackTrack上运行Chrome出现“Google Chrome can not be run as root”错误
查看>>
Mac上git自动补全功能
查看>>
看了一些帖子的疑问
查看>>
分享一个批量添加nagios的脚本
查看>>
编写小***软件
查看>>
彻底征服Windows上Open×××客户端的源地址选择问题
查看>>
使用ZeroMQ彻底重构Open×××的设想以及一些新想法
查看>>
mysql常用命令
查看>>
我的友情链接
查看>>
白话Kubernetes网络
查看>>
浅析正则表达式
查看>>
oracle备份之-- 使用数据泵 闪回
查看>>
Mysql5.7 查看表结构基本语句之describe
查看>>
mongodb的资料
查看>>
分享平时工作中那些给力的shell命令
查看>>
我的友情链接
查看>>
redis配置,状态监控与性能调优
查看>>
使用CDC捕获SQLSERVER数据变更
查看>>
在mac os中安装nginx,php
查看>>
JavaScript这些代码你都不会,你还有什么好说的!!!
查看>>