Pregunta ¿Cuál es la diferencia entre g ++ y gcc?


¿Cuál es la diferencia entre g ++ y gcc? ¿Cuáles deberían usarse para el desarrollo general de c ++?


662
2017-10-05 20:25


origen


Respuestas:


gcc y g++ son compiladores-controladores del compilador Gnu Colección'(que alguna vez fue solo el' Gnu ' C compilador').

A pesar de que automáticamente determinan qué backends (cc1  cc1plus ...) para llamar dependiendo del tipo de archivo, a menos que se invalide con -x language, tienen algunas diferencias.

La diferencia probablemente más importante en sus valores predeterminados es a qué bibliotecas se vinculan automáticamente.

De acuerdo con la documentación en línea de GCC opciones de enlace y cómo se invoca g ++, g++ es equivalente a gcc -xc++ -lstdc++ -shared-libgcc (la primera es una opción de compilador, la segunda dos son opciones de enlazador). Esto se puede verificar ejecutando ambos con el -v opción (muestra los comandos back-end toolchain que se están ejecutando).


555
2017-10-05 20:26



GCC: Colección compilador GNU

  • Referencias a todos los diferentes idiomas admitidos por el compilador GNU.

gcc: compilador GNU C
g ++: Compilador GNU C ++

Las principales diferencias

  1. gcc compilará: * .c / *. archivos cpp como C y C ++ respectivamente.
  2. g ++ compilará los archivos * .c / *. cpp pero todos serán tratados como archivos C ++.
  3. Además, si usas g ++ para vincular los archivos objeto, automáticamente enlaza en las librerías std C ++ (gcc no hace esto).
  4. gcc compilando archivos C tiene menos macros predefinidas.
  5. gcc compilación * .cpp y g ++ compilación * .c / *. cpp tiene algunas macros adicionales.

Macros extra al compilar archivos * .cpp:

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

352
2017-10-06 01:55



Para c ++ debes usar g ++.

Es el mismo compilador (por ejemplo, la colección de compiladores de GNU). GCC o G ++ solo eligen un front-end diferente con diferentes opciones predeterminadas.

En pocas palabras: si usa g ++, el frontend le dirá al vinculador que es posible que desee vincularlo con las bibliotecas estándar de C ++. El frontend gcc no hará eso (también podría vincularse con ellos si pasa las opciones de línea de comando correctas).


60
2017-10-05 20:29



Aunque los comandos gcc y g ++ hacen cosas muy similares, g ++ está diseñado para ser el comando que invocarías para compilar un programa C ++; está destinado a hacer automáticamente lo correcto.

Detrás de escena, son realmente el mismo programa. Según tengo entendido, ambos deciden si compilan un programa como C o como C ++ en función de la extensión del nombre del archivo. Ambos son capaces de vincularse con la biblioteca estándar de C ++, pero solo g ++ lo hace de forma predeterminada. Entonces, si tiene un programa escrito en C ++ que no necesita vincularse con la biblioteca estándar, gcc hará lo correcto; pero entonces, también lo haría g ++. Entonces realmente no hay razón para no usar g ++ para el desarrollo general de C ++.


15
2017-10-06 00:51



Cuál es la diferencia entre g++ y gcc?

gcc ha evolucionado a partir de un lenguaje único "Compilador GNU C" para ser una "Colección de Compilador GNU" en varios idiomas. El término "compilador GNU C" todavía se usa a veces en el contexto de la programación C.

los g++  es el compilador de C ++ para la Colección de Compiladores GNU. Me gusta gnat es el compilador de Ada para gcc. ver Uso de la Colección de compiladores de GNU (GCC)

Por ejemplo, el Ubuntu 16.04 man g++ comando devuelve el GCC(1) página de manual.

los man gcc Establece que ...

g++ acepta principalmente las mismas opciones que gcc

y que el predeterminado ...

... uso de gcc no agrega la biblioteca C ++. g++ es un programa   que llama a GCC y especifica automáticamente la vinculación con C ++   biblioteca. Trata los archivos .c, .h y .i como archivos fuente C ++ en lugar de   Archivos fuente C a menos que se use -x. Este programa también es útil cuando   precompilando un archivo de cabecera C con una extensión .h para usar en C ++   compilaciones.

Busque el gcc páginas del hombre para más detalles sobre las varianzas de opción de gcc y g++.

¿Cuál debería usarse para el desarrollo general de c ++?

Ya sea gcc o g++ se puede usar para el desarrollo general de C ++ con la configuración de opciones aplicable. Sin embargo, g++ el comportamiento predeterminado se alinea más naturalmente con un desarrollo céntrico de C ++.


15
2018-01-05 10:34



Me interesé por el problema y realicé algunos experimentos

  1. Encontré esa descripción aquí, pero es muy corto.

  2. Luego traté de experimentar con gcc.exe y g ++. Exe en mi máquina de 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. Intenté compilar los archivos de prueba simple c89, c99 y c ++ 1998 y me funcionó bien con las extensiones correctas que coinciden con el idioma

    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. Pero cuando intento ejecutar la herramienta "compilación gnu" de esa manera:

    $ 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. Pero este todavía funciona sin errores

    $ gcc -x c++ -std=c++98 test_cpp.c
    
  6. Y esto también

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

PD. Archivos de prueba

$ 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;
}

Recomendaciones:

  1. Si mira el árbol de procesos, entonces parece que gcc y g ++ se encuentran en el back-end de otras herramientas, que en mi entorno son: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe

  2. gcc funciona bien como metatool para si tiene la extensión correcta o el conjunto correcto -std -x banderas. Ver esta


10
2018-03-16 16:30



La única diferencia notable es que si pasas una .c a gcc compilará como C, mientras que g ++ siempre la tratará como C ++


9
2017-10-05 20:35



"GCC" es un término abreviado común para la Colección de Compiladores GNU. Este es el nombre más general para el compilador, y el nombre utilizado cuando se hace hincapié en la compilación de programas C (como la abreviatura anteriormente significaba "Compilador GNU C").

Cuando se hace referencia a la compilación de C ++, es habitual llamar al compilador "G ++". Como solo hay un compilador, también es correcto llamarlo "GCC" sin importar el contexto del idioma; sin embargo, el término "G ++" es más útil cuando se hace hincapié en la compilación de programas C ++.

Puedes leer más aquí.


9
2017-10-18 11:37



gcc y g ++ son ambos compiladores de GNU. Ambos compilan c y c ++. La diferencia es para los archivos * .c gcc lo trata como un programa c, y g ++ lo ve como un programa c ++. * Los archivos .cpp se consideran programas en c ++. c ++ es un super conjunto de c y la sintaxis es más estricta, así que ten cuidado con el sufijo.


0
2017-08-12 08:44



Estaba probando gcc y g ++ en un sistema Linux. Al usar MAKEFILE, puedo definir el compliler utilizado por "GNU make". Probé con la característica de localización llamada "memoria dinámica" de "C plus plus" por:

int main(){

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

Solo g ++ puede compilarse exitosamente en mi computadora mientras que gcc informará el error

undefined reference to `operator new(unsigned long)'

Por lo tanto, mi propia conclusión es que gcc no es totalmente compatible con "C plus plus". Parece que elegir g ++ para archivos fuente en C ++ es una mejor opción.


0
2017-11-02 20:45