ultima compiler compilador gcc g++

gcc - compiler - mingw



¿Cuál es la diferencia entre gcc y g++/gcc-c++? (2)

Me parece que gcc puede ocuparse de proyectos c y c ++, entonces, ¿por qué se necesita g ++ / gcc-c ++?

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


Por lo que yo sé, g ++ usa las opciones correctas del enlazador C ++ mientras que gcc usa las opciones del enlazador C (para que pueda obtener referencias indefinidas, etc.).


gcc compilará los archivos fuente C como archivos fuente C y C ++ como C ++ si el archivo tiene una extensión apropiada; sin embargo, no se vinculará automáticamente en la biblioteca de C ++.

g++ incluirá automáticamente la biblioteca C ++; de forma predeterminada, también compilará archivos con extensiones que indican que son fuente C como C ++, en lugar de como C.

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

Los archivos fuente de C ++ usan convencionalmente uno de los sufijos .C , .cc , .cpp , .CPP , .c++ , .cp o .cxx ; Los archivos de cabecera C ++ a menudo usan .hh , .hpp , .H o (para código de plantilla compartida) .tcc ; y los archivos C ++ preprocesados ​​usan el sufijo .ii . GCC reconoce archivos con estos nombres y los compila como programas C ++, incluso si llama al compilador de la misma manera que para compilar programas C (generalmente con el nombre gcc).

Sin embargo, el uso de gcc no agrega la biblioteca de C ++. g ++ es un programa que llama a GCC y trata los .c , .h y .i como archivos fuente C ++ en lugar de archivos fuente C a menos que se use -x, y especifica automáticamente el enlace contra la biblioteca C ++. Este programa también es útil al precompilar un archivo de encabezado C con una extensión .h para su uso en compilaciones de C ++.

Por ejemplo, para compilar un programa sencillo de C ++ que escribe en la secuencia std::cout , puedo usar cualquiera (MinGW en Windows):

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

Pero si intento:

  • gcc -o test.exe test.cpp

Obtengo referencias indefinidas en el momento del enlace.

Y para la otra diferencia, el siguiente programa 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; }

compila y funciona bien usando:

  • gcc -o test.exe test.c

Pero da varios errores cuando se compila con:

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

Errores:

test.c: In function ''int main()'': test.c:6:10: error: expected unqualified-id before ''new'' test.c:6:10: error: expected initializer before ''new'' test.c:7:32: error: invalid conversion from ''void*'' to ''int*'' test.c:10:9: error: expected type-specifier before ''='' token test.c:10:11: error: lvalue required as left operand of assignment test.c:12:36: error: expected type-specifier before '')'' token