协慌网

登录 贡献 社区

g ++ 和 gcc 有什么区别?

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

答案

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

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

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

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

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

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

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

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