关于c ++:CC,gcc和g ++之间的区别?

Difference between CC, gcc and g++?

编译时3个编译器cc、gcc、g++有什么区别?汇编中的C和C++代码代码生成、可用库、语言功能等?


答案是平台特定的;例如,在Linux上发生的事情与在Solaris上发生的事情不同。好的。

简单的部分(因为它不是平台特定的)是"gcc"和"g++"的分离:好的。

  • gcc是gcc(gnu编译器集合)中的gnu c编译器。
  • G++是GCC中的GNU C++编译器。

硬部分,因为它是平台特定的,所以是"cc"(和"cc")的含义。好的。

  • 在Solaris上,CC通常是Sun C++编译器的名称。
  • 在Solaris上,c c通常是sunc编译器的名称。
  • 在Linux上,如果存在的话,cc可能是指向g++的链接。
  • 在Linux上,cc是指向gcc的链接。

但是,即使在Solaris上,CC也可能是来自/usr/ucb的基于BSD的旧C编译器。在实践中,这通常没有安装,只有一个存根失败,给那些试图编译和安装自我配置软件的人造成了巨大的破坏。好的。

在HP-UX上,默认的"c c"仍然是一个K&R-Only C编译器,安装后允许在必要时重新链接内核,并且不支持标准C,因此不能用于现代软件工作。您必须使用其他编译器名称("acc"iirc)。同样,在AIX上,System 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有各种各样的扩展,如果你知道你只针对这个编译器系列,那么你的生活就简单了。好的。好啊。


CC是一个引用系统C编译器的环境变量。它指向什么(可访问的库等)取决于平台。通常它会指向实际的C编译器(驱动程序)/usr/bin/cc。在Linux平台上,CC几乎总是指向/usr/bin/gcc

gcc是GNU编译器集合的驱动程序二进制文件。它可以编译C、C++和可能的其他语言;它通过文件扩展名来确定语言。

EDOCX1 5是一个驱动二进制,像EDCOX1,4,但有几个特殊的选项集用于编译C++。值得注意的是(根据我的经验),默认情况下,g++将链接libstdc+,而gcc将不会。


我只想在Linux中添加一个CC信息。它与GCC有关。去检查一下。enter image description here

同样,C++也是一样。

1
2
3
4
5
6
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++