gcc和g ++ / gcc-c ++之间的区别是什么?

时间:2011-05-02 05:16:51

标签: gcc g++

在我看来,gcc可以处理c和c ++项目,那么为什么需要g ++ / gcc-c ++?

g ++和gcc-c ++有什么区别?

2 个答案:

答案 0 :(得分:54)

如果文件具有适当的扩展名,

gcc将C源文件编译为C和C ++源文件,如C ++;但是它不会自动链接到C ++库中。

g++将自动包含C ++库;默认情况下,它还会编译带有扩展名的文件,这些文件表明它们是C源代码,而不是C语言。

来自http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b

  

C ++源文件通常使用其中一个后缀.C.cc.cpp.CPP.c++.cp或{ {1}}; C ++头文件通常使用.cxx.hh.hpp或(对于共享模板代码).H;和预处理的C ++文件使用后缀.tcc。 GCC识别具有这些名称的文件并将它们编译为C ++程序,即使您以与编译C程序相同的方式调用编译器(通常使用名称gcc)。

     

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

例如,要编译一个写入.h流的简单C ++程序,我可以使用(Windows上的MinGW):

  • g ++ -o test.exe test.cpp
  • gcc -o test.exe test.cpp -lstdc ++

但如果我尝试:

  • gcc -o test.exe test.cpp

我在链接时获得了未定义的引用。

另一个不同之处是以下C程序:

std::cout

使用以下命令编译和运行:

  • gcc -o test.exe test.c

但是在编译时会出现几个错误:

  • g ++ -o test.exe test.c

错误:

#include <stdlib.h>
#include <stdio.h>

int main() 
{
    int* new;
    int* p = malloc(sizeof(int));

    *p = 42;
    new = p;

    printf("The answer: %d\n", *new);

    return 0;
}

答案 1 :(得分:0)

据我所知,g ++使用正确的C ++链接器选项,而gcc使用C链接器选项(因此您可能会获得未定义的引用等)。