Pergunta

O que é a diferença entre g ++ e gcc? Quais os que devem ser usados ??para c ++ geral de desenvolvimento?

Foi útil?

Solução

gcc e g++ são compilador-drivers do GNU Compiler Collection (que era era uma vez apenas o GNU C Compiler ).

Mesmo que eles automaticamente determinar quais backends (cc1 cc1plus ...) para chamar dependendo do tipo de arquivo, a menos que substituída com -x language, eles têm algumas diferenças.

A diferença provavelmente mais importante em seus padrões é que as bibliotecas ligam contra automaticamente.

De acordo com a documentação on-line do GCC opções de link e como g ++ é invocado , g++ é equivalente a gcc -xc++ -lstdc++ -shared-libgcc (o 1º é uma opção do compilador, o segundo dois são opções vinculador). Isto pode ser verificado executando tanto com a opção -v (ele exibe o backend toolchain comandos a ser executado).

Outras dicas

GCC: GNU Compiler Collection

  • Referrers para todos os diferentes idiomas que são suportados pelo compilador GNU.

gcc: GNU C Compiler
g ++: GNU C ++ Compiler

As principais diferenças:

  1. gcc irá compilar:.. Arquivos * .c / * CPP como C e C ++, respectivamente
  2. g ++ irá compilar:.. Arquivos * .c / * CPP, mas todos eles serão tratados como arquivos C ++
  3. Além disso, se você usar g ++ para ligar os arquivos objeto automaticamente ligações nas bibliotecas std C ++ (gcc não faz isso).
  4. gcc compilar arquivos C tem menos macros pré-definidas.
  5. gcc compilação de arquivos * ++ compilação * .c / *. CPP CPP e G tem alguns macros extras.

Macros extra ao compilar arquivos * .cpp:

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

Para c ++ você deve usar g ++.

É o mesmo compilador (por exemplo, o GNU Compiler Collection). GCC ou G ++ basta escolher um front-end diferente, com diferentes opções padrão.

Em poucas palavras: se você usar g ++ a interface irá informar o vinculador que você pode querer ligação com a bibliotecas padrão C ++. O frontend gcc não vai fazer isso (também pode ligar com eles, se você passar as opções de linha de comando direita).

O que é a diferença entre g++ e gcc?

gcc evoluiu de uma única língua "GNU C Compiler" para ser um multi-linguagem "GNU Compiler Collection". O termo "GNU C Compiler" ainda é usado às vezes no contexto de programação C.

O g++ é o compilador C ++ para o GNU Compiler Collection. Como gnat é o compilador Ada para gcc. consulte Usando o GNU Compiler Collection (GCC)

Por exemplo, o Ubuntu 16.04 e 18.04 comando man g++ retornos do GCC(1) página manual.

O Ubuntu 16.04 e 18.04 estados man gcc que ...

g++ aceita em sua maioria as mesmas opções que gcc

e que o padrão ...

... uso de gcc não adicionar a biblioteca C ++. g++ é um programa que chama GCC e automaticamente especifica ligando contra o C ++ biblioteca. Trata .c, .h e arquivos .I como C ++ arquivos de origem em vez de arquivos de origem C a menos que -x é usado. Este programa também é útil quando pré-compilação de um arquivo de cabeçalho C com uma extensão .h para uso em C ++ compilações.

Procure nas páginas man gcc para mores informações sobre a opção de variações de gcc e g++.

Qual deve ser usado para c ++ geral de desenvolvimento?

Tecnicamente, quer gcc ou g++ pode ser usado para o desenvolvimento geral C ++ com as configurações de opção aplicável. No entanto, o comportamento g++ padrão é naturalmente alinhado com um C ++ desenvolvimento.

A página man Ubuntu 18.04 aditado o seguinte parágrafo:

A maneira usual para executar GCC é para executar o chamado gcc executável ou machine-gcc quando cross-compilação, ou machine-gcc-version para executar uma versão específica do GCC. Quando você compilar programas em C ++, você deve invocar GCC como g++ vez.

A única diferença notável é que se você passar um .c para gcc ele irá compilar como C, ao passo que g ++ sempre vai tratá-lo como C ++.

Embora o gcc e g ++ comandos fazem coisas parecidas, g ++ é projetado para ser o comando que você invocar para compilar um programa C ++; ele é destinado para fazer automaticamente a coisa certa.

Nos bastidores, eles são realmente o mesmo programa. Pelo que entendi, tanto decidir se a compilar um programa como C ou como C ++ com base na extensão do arquivo. Ambos são capazes de ligar contra a biblioteca padrão do C ++, mas apenas g ++ faz isso por padrão. Então se você tem um programa escrito em C ++ que não acontece com a necessidade de ligação com a biblioteca padrão, gcc vai acontecer para fazer a coisa certa; mas, em seguida, isso seria g ++. Portanto, não há realmente nenhuma razão para não usar g ++ para C ++ geral de desenvolvimento.

I tornou-se interessado no assunto e fazer algumas experiências

  1. Eu encontrei essa descrição aqui , mas é muito curto.

  2. Então eu tentei experimentar com gcc.exe e g ++ exe na minha máquina Windows:.

    $ g++ --version | head -n1 
    g++.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
    $ gcc --version | head -n1
    gcc.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
  3. Eu tentei compilar C89, C99, e C ++ 1998 arquivos simples de teste e é um trabalho bem para mim com extensões corretas correspondentes para a linguagem

    gcc -std=c99 test_c99.c
    gcc -std=c89 test_c89.c 
    g++ -std=c++98 test_cpp.cpp
    gcc -std=c++98 test_cpp.cpp
    
  4. Mas quando tento executar "gnu Compiler Collection" ferramenta dessa maneira:

    $ gcc -std=c++98 test_cpp.c
    cc1.exe: warning: command line option '-std=c++98' is valid for C++/ObjC++ but not for C [enabled by default]
    
  5. Mas este ainda trabalho sem erros

    $ gcc -x c++ -std=c++98 test_cpp.c
    
  6. E isso também

    $ g++ -std=c++0x test_cpp_11.cpp 
    

P.S. arquivos de teste

$ cat test_c89.c test_c99.c test_cpp.cpp

// C89 compatible file
int main()
{
    int x[] = {0, 2};
    return sizeof(x);
}

// C99 compatible file
int main()
{
    int x[] = {[1]=2};
    return sizeof(x);
}

// C++1998,2003 compatible file
class X{};
int main()
{
    X x;
    return sizeof(x);
}

// C++11
#include <vector>
enum class Color : int{red,green,blue}; // scoped enum
int main()
{
    std::vector<int> a {1,2,3}; // bracket initialization
    return 0;
}

Resultados:

  1. Se olhar para árvore de processos, então parece que gcc e g ++ é backend para outras ferramentas, que no meu ambiente são: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe

  2. gcc funciona bem como metatool para se você tem extensão correta ou conjunto correto bandeiras -x -std. Consulte este

“GCC” é um termo taquigráfico comum para o GNU Compiler Collection. Este é o nome geral mais para o compilador, eo nome usado quando a ênfase está na compilação de programas C (como a abreviatura antigamente significava “GNU C Compiler”).

Ao se referir a compilação C ++, é usual chamar o compilador “G ++”. Uma vez que existe apenas um compilador, também é preciso chamá-lo “GCC” não importa o contexto da linguagem; no entanto, o termo “G ++” é mais útil quando a ênfase está na compilação de programas C ++.

Você pode ler mais aqui .

Eu estava testando gcc e g ++ em um sistema Linux. Usando MAKEFILE, posso definir o compliler usado por "GNU make". Eu testei com a chamada "memória dinâmica" característica do "C plus plus" localizar por:

int main(){

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

Apenas g ++ pode compilar com sucesso no meu computador enquanto gcc irá relatar erro

undefined reference to `operator new(unsigned long)'

Assim, a minha própria conclusão é gcc não suporta totalmente "C plus plus". Parece que a escolha g ++ para arquivos de origem C ++ é uma opção melhor.

gcc e g ++ são ambos compilador GNU. Ambos compilação C e C ++. A diferença é para arquivos * .c gcc trata como um programa c e g ++ vê-lo como um programa c ++. * arquivos .cpp são considerados programas em C ++. c ++ é um conjunto de super c e a sintaxe é mais rigorosa, por isso tenha cuidado sobre o sufixo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top