当前位置:   article > 正文

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

/usr/bin/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来指定。

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

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

  1. #define __GXX_WEAK__ 1
  2. #define __cplusplus 1
  3. #define __DEPRECATED 1
  4. #define __GNUG__ 4
  5. #define __EXCEPTIONS 1
  6. #define __private_extern__ extern

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/261124
推荐阅读
相关标签
  

闽ICP备14008679号