¿Cuál es la diferencia entre g ++ y gcc? ¿Cuáles deberían usarse para el desarrollo general de C++?¿Cuál es la diferencia entre g ++ y gcc?
Respuesta
gcc
y g++
son compilador de los conductores de la 'GNU Compiler Collection ' (que fue en otro tiempo sólo el 'Gnu compilador de C').
A pesar de que ellos determinan automáticamente qué backends (cc1
cc1plus
...) para llamar dependiendo del tipo de archivo, a menos que se modifique con -x language
, tienen algunas diferencias.
La diferencia probablemente más importante en sus valores predeterminados es a qué bibliotecas se vinculan automáticamente.
Según [1] y [2], g++
es equivalente a gcc -xc++ -lstdc++ -shared-libgcc
(la primera es una opción del compilador, el segundo dos son las opciones del vinculador). Esto se puede comprobar ejecutando ambos con la opción -v
(muestra los comandos back-end toolchain que se están ejecutando).
Para C++ debe usar g ++.
Es el mismo compilador (por ejemplo, la colección del compilador de GNU). GCC o G ++ solo eligen un front-end diferente con diferentes opciones predeterminadas.
En pocas palabras: si usa g ++ la interfaz le dirá al vinculador que es posible que desee vincular 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).
La única diferencia notable es que se pasa un .c GCC se compilará como C, mientras que g ++ siempre habrá tratarlo como C++
(Tarde, pero para la posteridad,) Como han señalado otras respuestas, esta no es de ninguna manera "la única diferencia notable", a menos que el lector tenga una definición sesgada de notación. –
Aunque el gcc y g ++ comandos hacen cosas muy similares, g ++ está diseñado ser el comando que invocarías para compilar un programa C++; está destinado a hacer automáticamente lo correcto.
Detrás de escena, en realidad son 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++.
GCC: GNU Compiler Collection
- Referido a todos los diferentes idiomas soportados por el compilador de GNU.
gcc: GNU C Compilador
g ++: GNU C++ Compiler
Las principales diferencias:
- gcc de compilación:. * .c/* cpp como C y C++ respectivamente.
- g ++ compilará: *.c/*. cpp pero todos serán tratados como archivos C++.
- Además, si usas g ++ para vincular los archivos objeto, automáticamente se enlaza en las librerías std C++ (gcc no hace esto).
- gcc compilación de archivos C tiene menos macros predefinidas.
- gcc compilación * .cpp yg ++ compilación * .c/*. Cpp tiene algunas macros adicionales.
macros adicionales al compilar archivos * .cpp:
#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
Puede vincular la biblioteca std C++ en 'gcc' pasando el parámetro' -lstdC++ '. –
Hay más diferencias entre 'gcc' y 'g ++' que solo las bibliotecas estándar, por lo que 'gcc -lstdC++' aún no obtendrá el mismo comportamiento que 'g ++'. Ponemos todo ese comportamiento específico del lenguaje en su propio controlador por una razón, eso es lo que está ahí. :-) –
Mi comentario no es solo vincular ... ese es el punto. Incluso si solo restringe la discusión a la vinculación (que su respuesta no fue), un usuario * todavía * no podrá usar toda la biblioteca estándar de C++ especificando '-lstdC++', ya que faltarán dependencias en matemática, RTTI e información de excepción. Si un caso de prueba determinado se vincula o falla dependerá del sistema operativo y qué características de C++ utiliza el caso de prueba, que es por qué todo ese conocimiento está integrado en el controlador g ++ en lugar de dejarse en manos del usuario para descubrirlo . –
“CCG” es una abreviatura común para la colección de compiladores de 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++.
Puede leer más here.
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.
C++ es un lenguaje diferente, no un superconjunto estricto de C, por lo que compilar con el idioma de destino incorrecto podría producir resultados inesperados. También tenga en cuenta que 'g ++' también interpretará '.cc' como una extensión de nombre de archivo C++. –
que se interesó en el tema y llevar a cabo algunos experimentos
me encontré con esa descripción here, pero es muy corto.
Luego trató de experimentar con gcc.exe y g ++ exe en mi 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
traté de compilar C89, C99, y C++ 1998 archivos de prueba simple y es el trabajo bien para mí con extensiones correctas a juego para el lenguaje
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
Pero cuando trato de ejecutar la herramienta de "colección de compiladores de 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]
Pero éste aún funciona sin errores
$ gcc -x c++ -std=c++98 test_cpp.c
Y esto también
$ g++ -std=c++0x test_cpp_11.cpp
P. S.Los 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;
}
Hallazgos:
Si vistazo a árbol de procesos entonces parece que gcc y g ++ es backend para otras herramientas, que en mi entorno son: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe
gcc funciona bien como para metatool si tiene la extensión correcta o conjunto correcto banderas -x -std. Ver this
¿Cuál es la diferencia entre g++
y gcc
?
gcc
ha evolucionado a partir de un solo idioma "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.
El g++
es el compilador de C++ para la compilación del compilador de GNU. Como gnat
es el compilador de Ada para gcc
. see Using the GNU Compiler Collection (GCC)
Por ejemplo en Ubuntu 16.04, man g++
devuelve la página de manual GCC(1)
.
Los estados que man gcc
...
g++
acepta en su mayoría las mismas opciones quegcc
y que el defecto ...
... uso de
gcc
no agrega la biblioteca C++.g++
es un programa que llama a GCC y especifica automáticamente el enlace contra la biblioteca C++ . Trata los archivos .c, .h y .i como archivos fuente C++ en lugar de los archivos fuente C de a menos que se use -x. Este programa también es útil cuando precompila un archivo de encabezado C con una extensión .h para su uso en compilaciones de C++ .
buscar en las páginas man para gcc
mores datos sobre las variaciones de opciones de gcc
y g++
.
¿Cuál debería usarse para el desarrollo general de C++?
O gcc
o g++
se pueden utilizar para el desarrollo general de C++ con la configuración de opción aplicable. Sin embargo, el comportamiento predeterminado de g++
está más naturalmente alineado con un desarrollo centrado en C++.
Estaba probando gcc y g ++ en un sistema Linux. Al usar MAKEFILE, puedo definir el compliler utilizado por "GNU make".Probé con la llamada "memoria dinámica" función de la localización "C plus plus" por:
int main(){
int * myptr = new int;
* myptr = 1;
printf("myptr[0] is %i\n",*myptr);
return 0;
}
Sólo g ++ puede compilar correctamente en mi equipo, mientras que gcc informará de error
undefined reference to `operator new(unsigned long)'
Así que 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.
Tienes que hacer dos trabajos: 1. seleccionar el idioma 2. elegir alguna biblioteca suhch como libstdC++ – PersianGulf
- 1. ¿Cuál es la diferencia entre -ggdb gcc gcc -g y
- 2. Diferencia entre -Wconversion entre gcc y g ++
- 3. Diferencia entre CC, gcc y g ++?
- 4. GCC -g vs -g3 Bandera GDB: ¿Cuál es la diferencia?
- 5. ¿Cuál es la diferencia entre make y gcc?
- 6. ¿Cuál es la diferencia entre --host y --target en gcc?
- 7. ¿Cuál es la diferencia entre arm-eabi-gcc y arm-elf-gcc?
- 8. diferencia entre -lgcc_s y gcc
- 9. Actualizando Apple g ++/gcc
- 10. ¿Cuál es la diferencia entre {0} y ""?
- 11. Cuál es la diferencia entre = y: =
- 12. ¿Cuál es la diferencia entre .ToString (+) y ""
- 13. Cuál es la diferencia entre $ (...) y `...`
- 14. ¿cuál es la diferencia entre:.! y: r !?
- 15. ¿Cuál es la diferencia entre ".equals" y "=="?
- 16. ¿Cuál es la diferencia entre dict() y {}?
- 17. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 18. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 19. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 20. ¿Cuál es la diferencia entre + = y = +?
- 21. ¿Cuál es la diferencia entre " " y ""?
- 22. Cuál es la diferencia entre $ y jQuery
- 23. ¿Hay alguna diferencia entre/\ s/g y/\ s +/g?
- 24. ¿cuál es la diferencia entre hpp y hxx?
- 25. ¿Cuál es la diferencia entre -ruta y -L?
- 26. gcc de Apple, ¿cuál es la diferencia entre -arch i386 y -m32?
- 27. ¿Cuál es la diferencia entre los compiladores Borland, GCC y MinGW?
- 28. ¿cuál es la diferencia entre strong (en LLVM) y retener (en GCC)?
- 29. ¿Cuál es la diferencia entre las banderas GCC -simbólicas y-compartidas?
- 30. ¿Cuál es la diferencia entre los parámetros `-fpic` y` -fPIC` gcc?
El compilador real es "cc1" para C y "cc1plus" para C++; tanto gcc como g ++ son controladores (que llaman al preprocesador/compilador/ensamblador/vinculador según sea necesario). – CesarB
Esta respuesta es bastante inútil, se reduce a "hay diferencias, por ejemplo, algunas bibliotecas". ¿Qué bibliotecas? ¿Qué otras diferencias además de las bibliotecas? No tengo idea de por qué obtuvo tantos votos ascendentes. – Malcolm