红联Linux门户
Linux帮助

gcc与g++区别和联系

发布时间:2008-03-27 01:08:11来源:红联作者:Keiboc
这几天初学Linux下的C/C++编程,有些体会,写下来分享一下。

首先编写了第一个C++程序,Hello,world![code]#include
using namespace std;
void main()
...{
cout << "Hello,world!" < return;
}[/code]用命令:gcc -o test test.cpp编译,有问题。然后分析,即分开运行gcc.

gcc -c -o test.o test.cpp。成功执行。

gcc -o test test.o。出现一堆链接错误。

g++ -o test test.o。成功执行。

由此发现,gcc与g++还有有一些区别的。

gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步

1.预处理,生成.i的文件[预处理器cpp]
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4.连接目标代码,生成可执行程序[链接器ld]

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

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

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

3 :编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。
文章评论

共有 1 条评论

  1. ytu_cyc 于 2008-05-18 09:57:08发表:

    Thanks a lot......