Linux C/C++ 编译器cc\gcc\g++\c++区别

使用Linux系统的编译c或者c++的人,都知道Linux系统的编译器有cc\gcc\g++\c++,但是他们之间到底是什么关系呢?

首先到系统的/usr/bin路径下,使用命令:ll | grep cc,可以看到如下:

由此,可以知道LInux系统下,cc就是gcc。

关于c++和g++也都在/usr/bin路径下,查看c++和g++的信息如下:

两个文件的大小是一样的,再进一步通过命令:diff c++ g++, 结果如下:

两个文件的内容也是一样的。所以,c++就是g++。至于为什么是两个文件,而不是使用连接,这个就不知道了。

那么看上去四个编译器,现在本质上只剩下两个了,也就是gcc和g++。

通过名字就很容易猜想到:gcc是编译c语言的,g++是编译C++语言的。其实非也。你也可以通过gcc -xc++ -lstdc++ -shared-libgcc也编译c++源代码。gcc和g++其实只是个外壳,在编译的时候,最终决定是调用后台的cc1还是cc1plus。编译的语言是可以通过编译选项-x来指定。

扫描二维码关注公众号,回复: 10333477 查看本文章

那么gcc和g++主要的区别是:编译时自动连接的库的不同。g++会自动连接std c++的库,而gcc不会。所以,使用gcc编译c++的代码,如果c++的代码中使用了std的类,例如:vector,会出现连接出错。

g++还有一个不同就是编译cpp文件时,会有一些预定义的宏:

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern

总之,不管如何,既然已经分为gcc和g++了,尽量用gcc编译C语言程序,使用g++编译c++程序;如果有的程序是两种语言混合的,那就只能使用g++了,对于c语言,可以使用extern “C” 来标识,让编译把他当做c语言来编译即可。

发布了85 篇原创文章 · 获赞 9 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/jimmyleeee/article/details/83860388