Linux | gcc和g++的区别

一.笼统的说明gcc和g++的区别

gcc 最开始的时候是 GNU C Compiler,就是一个c编译器。但是后来因为这个项目里边集成了更多其他不同语言的编译器,gcc就代表 the GNU Compiler Collection,所以表示一堆编译器的合集。 g++则是gcc的c++编译器。

现在我们在编译代码时调用的gcc,已经不是当初那个c语言编译器了,更确切的说他是一个驱动程序,根据代码的后缀名来判断调用c编译器还是c++编译器 (g++)。比如你的代码后缀是*.c,他会调用c编译器还有linker去链接c的library。如果你的代码后缀是cpp, 他会调用g++编译器,当然library call也是c++版本的。

二.更细致的了解gcc和g++的区别

1.gcc和g++对不同文件后缀的不同处理方法

  1. 对于.c后缀的文件,gcc把它当做是C程序,而g++当做是C++程序

  2. 对于.cpp后缀的文件,gcc和g++都会当做c++程序

2.gcc和g++在编译间段的关系

在编译阶段,g++会调用gcc,对于c++代码,两者是等价的,即编译工作最终都是由gcc来完成的。

3.gcc和g++在链接阶段的区别

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

但我们可以手动的让gcc完成链接,例如:

gcc -lstdc++ main.cpp

但是gcc在编译c程序的时候,它会自动链接c库的。

4.gcc和g++对是否extern "C"时的处理方法

当程序未加extern “C”时,用gcc和g++编译得到的函数名是一样的,都是以C++的命名方式。

当程序添加extern “C”后,用gcc和g++编译得到的函数名是一样的,都是以C的命名方式。

由此可见,extern “C”与采用gcc/g++并无关系。

 

你可能感兴趣的:(Linux,gcc,g++,gcc和g++的区别)