CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

关于gcc与g++

楼主daliu669()2006-11-21 09:39:29 在 Linux/Unix社区 / 程序开发区 提问

gcc与g++有什么区别? 问题点数:20、回复次数:33Top

1 楼hqx8211()回复于 2006-11-21 09:50:13 得分 0

gcc是C编译器,支持C99标准。(当然看gcc版本,很老的版本可能只支持C89标准)。  
  g++是C++编译器,兼容C标准。  
   
  编译纯C源程序项目,尽量用gcc;编译C++项目,只能用g++.Top

2 楼daliu669()回复于 2006-11-21 09:59:15 得分 0

但我的书上怎么写的gcc也可以编译c++程序呢?Top

3 楼ocor()回复于 2006-11-21 10:05:33 得分 0

GCC   stands   for   “GNU   Compiler   Collection”.   GCC   is   an   integrated   distribution   of   compilers   for   several   major   programming   languages.   These   languages   currently   include   C,   C++,   Objective-C,   Objective-C++,   Java,   Fortran,   and   Ada.    
   
  g++   is   a   program   that   calls   GCC   with   the   default   language   set   to   C++,   and   automatically   specifies   linking   against   the   C++   library.   On   many   systems,   g++   is   also   installed   with   the   name   c++.    
   
  more   infor:  
  http://gcc.gnu.org/  
  Top

4 楼hqx8211()回复于 2006-11-21 10:06:50 得分 0

try.  
   
  写一个c++程序,用gcc编译一下,看看有什么后果。  
  [09:34:09@fedora   ~/test]$gcc   test.cpp  
  /tmp/ccJJIVjC.o(.text+0x19):   In   function   `A::A()':  
  test.cpp:   undefined   reference   to   `std::cout'  
  /tmp/ccJJIVjC.o(.text+0x1e):test.cpp:   undefined   reference   to   `std::basic_ostream<char,   std::char_traits<char>   >&   std::operator<<   <std::char_traits<char>   >(std::basic_ostream<char,   std::char_traits<char>   >&,   char   const*)'  
  /tmp/ccJJIVjC.o(.text+0x29):test.cpp:   undefined   reference   to   `std::basic_ostream<char,   std::char_traits<char>   >&   std::endl<char,   std::char_traits<char>   >(std::basic_ostream<char,   std::char_traits<char>   >&)'  
  /tmp/ccJJIVjC.o(.text+0x2f):test.cpp:   undefined   reference   to   `std::basic_ostream<char,   std::char_traits<char>   >::operator<<(std::basic_ostream<char,   std::char_traits<char>   >&   (*)(std::basic_ostream<char,   std::char_traits<char>   >&))'  
  /tmp/ccJJIVjC.o(.text+0x3c):test.cpp:   undefined   reference   to   `operator   new[](unsigned   int)'  
  /tmp/ccJJIVjC.o(.text+0x67):   In   function   `A::A()':  
  test.cpp:   undefined   reference   to   `std::cout'  
  /tmp/ccJJIVjC.o(.text+0x6c):test.cpp:   undefined   reference   to   `std::basic_ostream<char,   std::char_traits<char>   >&   std::operator<<   <std::char_traits<char>   >(std::basic_ostream<char,   std::char_traits<char>   >&,   char   const*)'  
  /tmp/ccJJIVjC.o(.text+0x77):test.cpp:   undefined   reference   to   `std::basic_ostream<char,   std::char_traits<char>   >&   std::endl<char,   std::char_traits<char>   >(std::basic_ostream<char,   std::char_traits<char>   >&)'  
  /tmp/ccJJIVjC.o(.text+0x7d):test.cpp:   undefined   reference   to   `std::basic_ostream<char,   std::char_traits<char>   >::operator<<(std::basic_ostream<char,   std::char_traits<char>   >&   (*)(std::basic_ostream<char,   std::char_traits<char>   >&))'  
  /tmp/ccJJIVjC.o(.text+0x8a):test.cpp:   undefined   reference   to   `operator   new[](unsigned   int)'  
  /tmp/ccJJIVjC.o(.text+0xb5):   In   function   `A::~A()':  
  test.cpp:   undefined   reference   to   `std::cout'  
  /tmp/ccJJIVjC.o(.text+0xba):test.cpp:   undefined   reference   to   `std::basic_ostream<char,   std::char_traits<char>   >&   std::operator<<   <std::char_traits<char>   >(std::basic_ostream<char,   std::char_traits<char>   >&,   char   const*)'  
  /tmp/ccJJIVjC.o(.text+0xc5):test.cpp:   undefined   reference   to   `std::basic_ostream<char,   std::char_traits<char>   >&   std::endl<char,   std::char_traits<char>   >(std::basic_ostream<char,   std::char_traits<char>   >&)'  
  /tmp/ccJJIVjC.o(.text+0xcb):test.cpp:   undefined   reference   to   `std::basic_ostream<char,   std::char_traits<char>   >::operator<<(std::basic_ostream<char,   std::char_traits<char>   >&   (*)(std::basic_ostream<char,   std::char_traits<char>   >&))'  
  /tmp/ccJJIVjC.o(.text+0xe7):test.cpp:   undefined   reference   to   `operator   delete[](void*)'  
  /tmp/ccJJIVjC.o(.text+0x108):test.cpp:   undefined   reference   to   `operator   delete(void*)'  
  ............Top

5 楼sqs570408(流氓总督)回复于 2006-11-21 10:13:09 得分 20

gcc和g++都是GNU(组织)的一个编译器。  
   
  误区一: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,二者等价。  
     
  学习!Top

6 楼hqx8211()回复于 2006-11-21 10:22:18 得分 0

楼上的标准答案。以前看过,当时觉得没必要对工具区分那么清楚,又忘了。再学习一次。Top

7 楼wzzww(无知者无畏)(此人已死)回复于 2006-11-21 11:39:32 得分 0

我记到blog中,免得又忘了,又不知道去哪找  
  不过一般这种问题,只是找工作的时候面试会被问到了,实际工作中极少涉及到,因为你写C++代码时自然就用.cpp为后缀名,C代码就用.c,编译时也一样自然而然的c代码用gcc编译,c++代码用g++编译。Top

8 楼hyg2008(蓝色雨)回复于 2006-11-21 12:22:12 得分 0

markTop

9 楼pilixuanke(轩客)回复于 2006-11-21 13:01:25 得分 0

呵呵,学习^_^Top

10 楼lsyzl(海绵)回复于 2006-11-21 15:47:51 得分 0

markTop

11 楼weichen2005(md)回复于 2006-11-22 11:32:08 得分 0

mark.  
  Top

12 楼jronald(深白色)回复于 2006-11-22 11:34:01 得分 0

够详细的  
  g++把.c当.cpp编译好像没道理啊  
   
  听说gcc本身在编译时指定支持C++,然后就可以用gcc编译C++了。  
  如果是这样,就不理解了,g++编译时调用了gcc,但gcc如果不支持C++编译呢?问题是g++总是可以编译C++的。Top

13 楼lqh_wh(liqh)回复于 2006-11-22 11:52:43 得分 0

如果采用gcc编译c++的程序,需要加入-lstdc++Top

14 楼irplay(www.irplay.com)回复于 2006-11-22 12:53:30 得分 0

学习  
  没有blog只好记在论坛上Top

15 楼yanran_hill(燕然)回复于 2006-11-22 15:36:11 得分 0

使用gcc编译C++的话,应该加上-lstdc++标志,不然可能会找不到一些c++需要的连接库函数Top

16 楼m2213231()回复于 2006-11-22 19:54:57 得分 0

顶楼上的,补充一下,如果使用gcc编译.cpp的文件的话还应该加上"-x   c++"  
  Ex:     "gcc   -x   c++   -o   test.cpp   test.exe   -lstdc++"Top

17 楼HoBoss(学徒)回复于 2006-11-22 20:43:23 得分 0

markTop

18 楼OnlyAlone()回复于 2006-11-22 21:51:08 得分 0

markTop

19 楼wangxiao_cdut()回复于 2006-11-22 22:03:07 得分 0

那个地方可以下载到,g++哦?Top

20 楼wadefelix(流浪者幸运)回复于 2006-11-22 22:22:44 得分 0

gcc   and   GCC   is   not   the   same   thing  
  by   POORENGLISHTop

21 楼jiangkeredgirl(地狱卐小怪)回复于 2006-11-23 08:43:42 得分 0

markTop

22 楼Could(翻墙鹦鹉)回复于 2006-11-23 09:08:02 得分 0

mark2Top

23 楼sjjf(水晶剑锋)回复于 2006-11-23 10:14:25 得分 0

markTop

24 楼lxhtzy(天之翼)回复于 2006-11-23 11:13:08 得分 0

学习Top

25 楼sunwhite()回复于 2006-11-23 13:26:54 得分 0

学习ingTop

26 楼PLYAT(山野的風)回复于 2006-11-23 17:06:55 得分 0

靠,一大早就给我发信息说你的帖子上热贴榜了!  
  来DD!Top

27 楼kelven2004()回复于 2006-11-23 22:45:32 得分 0

学习ING~~~Top

28 楼lgd3r()回复于 2006-11-24 09:23:08 得分 0

学习!!Top

29 楼Tycool(Xuco)回复于 2006-11-24 10:10:19 得分 0

好帖啊,学习。Top

30 楼VCLIFE(linux&&qt)回复于 2006-11-24 12:20:22 得分 0

g++   是gcc一部分Top

31 楼vlient(小游)回复于 2006-11-27 23:38:09 得分 0

markTop

32 楼evawu999(小九)回复于 2006-11-28 10:57:49 得分 0

mark  
  Top

33 楼Java_java2005(深圳代码工)回复于 2006-11-30 10:02:55 得分 0

markTop

相关问题

关键词

得分解答快速导航

  • 帖主:daliu669
  • sqs570408

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo