gcc gcc-c++




g++和gcc有什么区别? (7)

“GCC”是GNU编译器集合的通用速记术语。 这是编译器最通用的名称,也是编译C程序时使用的名称(因为以前的缩写代表“GNU C编译器”)。

当提到C ++编译时,通常会调用编译器“G ++”。 由于只有一个编译器,无论语言环境如何,将其称为“GCC”也是准确的; 然而,当强调编译C ++程序时,术语“G ++”更有用。

你可以here阅读更多。

g ++和gcc有什么区别? 哪些应该用于一般的c ++开发?


GCC:GNU编译器集合

  • 推荐人使用GNU编译器支持的所有不同语言。

gcc:GNU C编译器
g ++:GNU C ++编译器

主要区别:

  1. gcc将分别编译为:* .c / * .cpp文件,分别为C和C ++。
  2. g ++将编译:* .c / * .cpp文件,但它们都将被视为C ++文件。
  3. 另外如果你使用g ++来链接目标文件,它会自动链接到std C ++库(gcc不会这样做)。
  4. gcc编译C文件的预定义宏较少。
  5. gcc编译* .cpp和g ++编译* .c / *。cpp文件有一些额外的宏。

编译* .cpp文件时额外的宏:

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

gccg++是'Gnu Compiler Collection '的编译器驱动程序(曾经是'Gnu C编译器 ')。

即使它们自动确定根据文件类型调用哪个后端( cc1 cc1plus ...),除非用-x language覆盖,它们有一些差异。

它们的默认值可能最重要的区别是它们自动链接的库。

根据GCC的在线文档链接选项以及如何调用 g++g++等同于gcc -xc++ -lstdc++ -shared-libgcc (第一个是编译器选项,第二个是链接器选项)。 这可以通过使用-v选项运行来检查(它显示正在运行的后端工具链命令)。


g++gcc什么区别?

gcc已经从单一的语言“GNU C编译器”发展成为一种多语言的“GNU编译器集合”。 术语“GNU C编译器”有时仍然用于C编程。

g++ GNU编译器集合的C ++编译器。 像gnatgcc的Ada编译器。 请参阅使用GNU编译器集合(GCC)

例如在Ubuntu 16.04上, man g++返回GCC(1)手册页。

man gcc指出......

g++主要接受与gcc相同的选项

并默认...

...使用gcc不会添加C ++库。 g++是一个调用GCC并自动指定与C ++库链接的程序。 除非使用-x,否则它会将.c,.h和.i文件视为C ++源文件而不是C源文件。 当预编译带有.h扩展名的C头文件以用于C ++编译时,该程序也很有用。

gcc手册页中查找关于gccg++的选项差异的更多细节。

哪一个应该用于一般的c ++开发?

gccg++可用于通用C ++开发,并具有适用的选项设置。 但是, g++默认行为更自然地与C ++中心开发对齐。


唯一明显的区别是,我将.c传递给gcc它将编译为C,而g ++将始终将它视为C ++


对于c ++,你应该使用g ++。

它是相同的编译器(例如GNU编译器集合)。 GCC或G ++只是选择具有不同默认选项的不同前端。

简而言之:如果使用g ++,前端会告诉链接器您可能想要链接到C ++标准库。 gcc前端不会这样做(如果你传递了正确的命令行选项,它也可以与它们链接)。


我正在linux系统中测试gcc和g ++。 通过使用MAKEFILE,我可以定义“GNU make”使用的编译器。 我通过以下方式测试了“C plus plus”的所谓“动态内存”定位功能:

int main(){

int * myptr = new int;
* myptr = 1;
printf("myptr[0] is %i\n",*myptr);
return 0;
}

只有g ++可以在我的电脑上成功编译,而gcc会报告错误

undefined reference to `operator new(unsigned long)'

所以我自己的结论是gcc不完全支持“C plus plus”。 看来选择g ++ for C ++源文件是一个更好的选择。







g++