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

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

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

Linux下的cc是gcc符号连接,可以通过$ls –l /usr/bin/cc来简单察看,该变量是make程序的内建变量,默认指向gcc。cc符号链接和变量存在的意义在于源码的移植性,可以方便的用 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的语法扩充之外,编译和链接C和C++的标准库通常也不一样呢,用gcc而非g++也编译了C++的程序就证明了这一点。

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

最新文章

  1. appserv中php升级问题
  2. strtr函数的用法
  3. ie6并不是不支持!important
  4. C#与数据库访问技术总结(七)综合示例
  5. linux5
  6. VPN服务器环境搭建
  7. Mysql 注意细节
  8. Leetcode 104. Maximum Depth of Binary Tree(二叉树的最大深度)
  9. document.all用法
  10. BZOJ 1800: [Ahoi2009]fly 飞行棋( 枚举 )
  11. MongoDB使用手册
  12. html中静态进度条的实现
  13. ASP.NET MVC应用程序使用异步及存储过程
  14. 抓包工具Fidder详解
  15. c/c++ 多线程 层级锁
  16. angularjs简单介绍和特点
  17. Overture小课堂之如何演绎钢琴滑音
  18. python的内置函数time
  19. message:GDI+ 中发生一般性错误。
  20. 矩阵游戏|ZJOI2007|BZOJ1059|codevs1433|luoguP1129|二分图匹配|匈牙利算法|Elena

热门文章

  1. Solr笔记(2)_Schema.xml和solrconfig.xml分析
  2. HDU 6041 I Curse Myself(点双联通加集合合并求前K大) 2017多校第一场
  3. tensorflowjs下载源文件到本地不能加载模型解决方案
  4. 解决response在controller返回乱码的解决方式
  5. Caused by: java.lang.ClassNotFoundException: java.com.bj186.ssm.controller.UserController
  6. Linux文件操作函数
  7. java在线聊天项目0.5版 解决客户端向服务器端发送信息时只能发送一次问题 OutputStreamWriter DataOutputStream socket.getOutputStream()
  8. 新建Maven工程,pom.xml报错web.xml is missing and <failOnMissingWebXml> is set to true
  9. Zookeeper 集群 BindException: Cannot assign requested address 解决方案
  10. Centos忘记密码解决方法