您的位置:首页 > 其它

gcc与g++的区别

2013-10-15 11:38 363 查看
1. gcc会把.c文件当做C语言代码编译,把.cpp文件当做C++语言代码编译,而g++则不会像gcc一样对源文件根据扩展名区别对待,即把所有的文件都当成c++源文件。

2. 对于编译器g++会调用gcc。对于C++的代码,编译阶段二者是等价的。但是链接阶段,gcc不会主动连接c++的库进行连接。所以一把c++代码都是用g++来链接。

3.gcc和g++对宏__cplusplus的处理:实际上这个宏是标志着编译器将会把代码按照C的语法来解释还是按照C++的语法来编译,如上所述,如果源文件的扩展名是.c,并且使用gcc编译,那么宏__cplusplus将是未定义的,否则,就是已定义的;

4.extern "C"的功能就就是把它所界定的那些函数按照C语言的语法和规则来编译;这是一个函数调用约定

5.使用extern
"C"与使用gcc和g++并没有关系;因为extern "C"只是用来约束代码按照C语言的语法要求和规则来编译;无论是gcc还是g++,使用extern "C"来约束的时候,都是以C语言的命名方式来为symbol命名的,否则,都是以C++语言的命名方式来为symbol命名的;

在linux下测试代码如下:

#include
<iostream>

2 using namespace std;

3

4 int printB(int a,char b);

5 extern "C" int printA(int a,char b);

6 int main()

7 {

8

9 return 0;

10

11

12 }

13 int printA(int a,char b)

14 {

15 cout<<"A"<<endl;

16 return 0;

17

18 }

19 int printB(int a,char b)

20 {

21 cout<<"B"<<endl;

22 return 0;

23 }



结论:

A.使用extern "C"与使用编译器gcc还是g++没有关系;extern "C"的使用只是约定代码按照C语言的语法要求来编译;extern "C"的使用独立于编译器的选择;换句话说,无论使用gcc还是g++,如果使用extern "C"来约定函数调用,则以C语言命名规则来命名;如果不使用extern "C"来约定函数调用,则以C++语言的命名规则来命名;

B.在编译阶段,g++是要调用gcc的;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: