veh*_*zzz 86 c c++ gcc compilation
在汇编代码生成,可用库,语言功能等方面编译C和C++代码时,3个编译器CC,gcc,g ++有什么区别?
Jon*_*ler 107
答案是平台特定的; 例如,Linux上发生的情况与Solaris上发生的情况不同.
简单的部分(因为它不是特定于平台的)是'gcc'和'g ++'的分离:
困难的部分,因为它是特定于平台的,是'CC'(和'cc')的含义.
但是,即使在Solaris上,也可能是cc是旧的基于BSD的C编译器/usr/ucb.实际上,通常没有安装,只有一个存根失败,对试图编译和安装自配置软件的人造成严重破坏.
在HP-UX上,默认的"cc"仍然是一个仅支持K&R的C编译器,允许在必要时重新连接内核,并且不能用于现代软件工作,因为它不支持标准C.您必须使用备用编译器名称('acc'IIRC).类似地,在AIX上,系统C编译器使用诸如"xlc"或"xlc32"之类的名称.
传统上,默认的系统编译器被称为"cc",当自身配置软件不知道还有什么用时,它会依赖于该名称.
POSIX试图通过要求程序c89(最初)和后来的c99存在来立法解决这个问题; 这些是符合ISO/IEC 9899:1989和9899:1999 C标准的编译器.POSIX成功是值得怀疑的.
这个问题询问了功能和库方面的差异.和以前一样,答案部分是平台特定的,部分是通用的.
C编译器和C++编译器之间存在很大差异.C++编译器将接受C++程序,不会编译任意C程序.(虽然可以在C++也理解的子集中编写C,但许多C程序都不是有效的C++程序).类似地,C编译器将接受C程序并拒绝大多数C++程序(因为大多数C++程序使用C中不可用的构造).
可供使用的库集取决于语言.C++程序通常可以在给定平台上使用C库; C程序通常不能使用C++库.因此,C++有更多的库可用.
需要注意的是,如果你是在Solaris上,由CC生成的目标代码是不是用g生产++目标代码兼容的 - 他们是与东西单独公约,如异常处理和名称重整(和名字改编两个不同的编译器是故意不同以确保不兼容的目标文件没有链接在一起!).这意味着如果要使用使用CC编译的库,则必须使用CC编译整个程序.这也意味着如果你想使用一个用CC编译的库和另一个用g ++编译的库,那你就不走运了.您必须至少重新编译其中一个库.
在生成汇编程序的质量方面,GCC(GNU编译器集合)做得非常好.但有时本机编译器工作得更好.我相信英特尔编译器有更广泛的优化,但尚未在GCC中复制.但是,任何这样的指责都是危险的,而我们不知道你关注的是什么平台.
就语言特性而言,编译器通常都非常接近当前标准(C++ 98,C++ 2003,C99),但标准语言与编译器支持的语言之间通常存在细微差别.对于所有C编译器,旧的C89标准支持基本相同(并且完整).语言的黑暗角落有所不同.您需要了解"未定义的行为","系统定义的行为"和"未指定的行为"; 如果您调用未定义的行为,您将在不同的时间获得不同的结果.还有很多选项(特别是使用GCC)来调整编译器的行为.如果您知道自己只是针对该编译器系列,那么GCC具有各种扩展,可以简化生活.
Man*_*agu 22
CC是一个环境变量,指的是系统的C编译器.它指向的是什么(库可访问等)取决于平台.通常它会指向/usr/bin/cc实际的c complier(驱动程序).在Linux平台上,CC几乎总是指向/usr/bin/gcc.
gcc是GNU编译器集合的驱动程序二进制文件.它可以编译C,C++和其他可能的语言; 它通过文件扩展名确定语言.
g++是一个驱动程序二进制文件gcc,但有一些特殊的选项设置用于编译C++.值得注意的是(根据我的经验),g++默认情况下会链接libstdc ++,而gcc不会.
我只想添加一个信息 what cc in Linux。它与 gcc 相关联。要检查它。

同样,与 c++ 相同。
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ whereis c++
c++: /usr/bin/c++ /usr/include/c++ /usr/share/man/man1/c++.1.gz
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ ls -l /usr/bin/c++
lrwxrwxrwx 1 root root 21 Jul 31 14:00 /usr/bin/c++ -> /etc/alternatives/c++
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ ls -l /etc/alternatives/c++
lrwxrwxrwx 1 root root 12 Jul 31 14:00 /etc/alternatives/c++ -> /usr/bin/g++
Run Code Online (Sandbox Code Playgroud)