Quelle est la différence entre g++ et gcc?

Quelle est la différence entre g++ et gcc? Quels sont ceux qui devraient être utilisés pour le développement général de c++?

687
demandé sur JamesFromIT 2008-10-06 00:25:13

10 réponses

gcc et g++ sont des pilotes compilateurs du "compilateur Gnu Collection " (qui était autrefois juste le "compilateur Gnu C ").

, même si elles déterminent automatiquement les contre-valeurs ( cc1 cc1plus )...) pour appeler en fonction du type de fichier, à moins qu'ils ne soient remplacés par -x language , ils ont quelques différences.

la différence probablement la plus importante dans leurs valeurs par défaut, il y a les bibliothèques contre lesquelles ils lient automatiquement.

selon la documentation en ligne de GCC link options et comment G++ est invoqué , g++ est équivalent à gcc -xc++ -lstdc++ -shared-libgcc (la première est une option de compilateur, les deux deuxièmes sont des options de linker). Cela peut être vérifié en exécutant les deux avec l'option -v (elle affiche les commandes de la chaîne d'outils en cours d'exécution).

579
répondu rbaleksandar 2018-03-14 08:18:58

GCC: collection de compilateurs GNU

  • renvoie à tous les langages pris en charge par le compilateur GNU.

gcc: compilateur GNU C

g++: Compilateur C++ de GNU

les principales différences:

  1. gcc compilera: *.C.*/fichiers cpp en C et c++ respectivement.
  2. g++ compilera:*.C.*/fichiers cpp, mais ils seront tous traités comme des fichiers C++.
  3. aussi si vous utilisez g++ pour lier les fichiers objet, il se lie automatiquement dans les bibliothèques std C++ (gcc ne fait pas cela).
  4. gcc compilant des fichiers C a moins de macros prédéfinies.
  5. de la compilation de gcc *.rpc et g++ compiler *.C.*/les fichiers cpp ont quelques macros supplémentaires.

Macros supplémentaires lors de la compilation *.fichiers cpp:

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
363
répondu Martin York 2017-07-15 19:14:27

pour c++ vous devez utiliser g++.

c'est le même compilateur (par exemple la collection de compilateurs GNU). GCC ou G++ il suffit de choisir une face avant différente avec différentes options par défaut.

en un mot: si vous utilisez g++, le frontend indiquera au linker que vous voulez peut-être établir un lien avec les bibliothèques standard C++. La frontend gcc ne le fera pas (elle pourrait aussi être liée avec eux si vous passez les bonnes options de ligne de commande).

64
répondu Nils Pipenbrinck 2008-10-05 20:29:26

Quelle est la différence entre g++ et gcc ?

gcc a évolué d'un langage simple" GNU C Compiler "pour être une multi-langue"GNU Compiler Collection". Le terme "compilateur GNU C" est encore utilisé parfois dans le contexte de la programmation en C.

le g++ est le compilateur C++ pour la collection de compilateurs GNU. Comme gnat est L'Ada compilateur pour gcc . voir utilisation de la collection de compilateurs GNU (GCC)

par exemple, la commande Ubuntu 16.04 et 18.04 man g++ renvoie la page de manuel GCC(1) .

Ubuntu 16.04 et 18.04 man gcc ...

g++ accepte la plupart du temps les mêmes options que gcc

et que le défaut ...

... l'utilisation de gcc n'ajoute pas la bibliothèque C++. g++ est un programme qui appelle GCC et spécifie automatiquement le lien par rapport au C++ bibliothèque. Il traite .C. ,h et .i file comme c++ source files au lieu de C fichiers source sauf si-x est utilisé. Ce programme est également utile lorsque précompiler un fichier d'en-tête C avec un .h extension pour utilisation en C++ compilation.

rechercher l'homme gcc des pages pour les mœurs de détails sur l'option écarts de gcc et g++ .

lequel devrait être utilisé pour le développement général de c++?

techniquement, soit gcc ou g++ peut être utilisé pour le développement général C++ avec les paramètres d'option applicables. Cependant, le comportement par défaut g++ est naturellement aligné sur un développement C++.

la page de manuel Ubuntu 18.04 ajouté le paragraphe suivant:

la façon habituelle d'exécuter GCC est d'exécuter l'exécutable appelé gcc , ou machine-gcc lors de la compilation croisée, ou machine-gcc-version pour exécuter une version spécifique de GCC. quand vous compilez des programmes C++, vous devez invoquer GCC comme g++ à la place.

17
répondu l --marc l 2018-10-03 02:56:30

bien que les commandes gcc et g++ fassent des choses très similaires, g++ est conçu pour être la commande que vous invoqueriez pour compiler un programme C++; il est destiné à faire automatiquement la bonne chose.

dans les coulisses, c'est le même programme. Comme je le comprends, les deux décident de compiler un programme en C ou en C++ basé sur l'extension du nom de fichier. Tous les deux sont capables de créer des liens avec la bibliothèque standard C++, mais seul g++ le fait par défaut. Donc, si vous avez un programme écrit en C++ qui n'arrive pas à avoir besoin de lien avec la bibliothèque standard, gcc fera la bonne chose; mais alors, g++aussi. Il n'y a donc aucune raison de ne pas utiliser g++ pour le développement général de C++.

16
répondu zaphod 2008-10-06 00:51:10

je me suis intéressé à la question et effectuer quelques expériences

  1. j'ai trouvé cette description ici , mais elle est très courte.

  2. Puis j'ai essayé d'expérimenter avec gcc.exe et g++.exe sur ma machine 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. j'ai essayé de compiler c89, c99, et c++1998 des fichiers de test simples et Cela fonctionne bien pour moi avec des extensions correctes correspondant à la langue

    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. mais quand j'essaie de lancer l'outil "gnu compiler collection "de cette façon:

    $ 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. mais celui-ci fonctionne toujours sans erreurs

    $ gcc -x c++ -std=c++98 test_cpp.c
    
  6. et ce aussi

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

p. S. Fichiers tests

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

conclusions:

  1. si on regarde l'arborescence des processus, il semble que gcc, et g++ sont en arrière-plan par rapport à d'autres outils, qui dans mon environnement sont: cc1plus.exe, ce1.exe, collect2.exe, comme.exe, ld.exe

  2. gcc fonctionne très bien comme metatool pour si vous avez l'extension correcte ou le réglage correct - des drapeaux std-X. Voir ce

10
répondu bruziuz 2016-03-02 16:54:44

" GCC " est un terme abrégé courant pour la collection de compilateurs GNU. C'est à la fois le nom le plus général du compilateur et le nom utilisé lorsque l'accent est mis sur la compilation de programmes C (comme l'abréviation de "GNU C Compiler").

quand on se réfère à la compilation C++, il est habituel d'appeler le compilateur"G++". Comme il n'y a qu'un seul compilateur, il est aussi juste de l'appeler "GCC" quel que soit le contexte de la langue; cependant ,le terme " g++" est plus utile lorsque l'accent est mis sur la compilation de programmes C++.

vous pouvez lire plus ici .

9
répondu Minh Triet Pham Tran 2016-02-15 14:11:38

la seule différence notable est que si vous passez un .c à gcc il se compilera en C, alors que g++ le traitera toujours en C++.

9
répondu njsf 2018-08-16 07:35:35

je testais gcc et g++ dans un système linux. En utilisant MAKEFILE, je peux définir le compilateur utilisé par"GNU make". J'ai testé avec la fonction de localisation" mémoire dynamique " de " C plus plus plus "par:

int main(){

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

seul g++ peut compiler avec succès sur mon ordinateur tandis que gcc signalera une erreur

undefined reference to `operator new(unsigned long)'

donc ma propre conclusion est que gcc ne supporte pas entièrement"C plus plus". il semble que le choix de g++ pour les fichiers source C++ est une meilleure option.

1
répondu magicmax 2016-11-02 20:45:15

gcc et g ++ sont tous deux des compilateurs GNU. Ils compilent c et c++. La différence est pour *.c files gcc le traite comme un programme c, et g++ le considère comme un programme c++. *.fichiers cpp sont considérés comme des programmes c++. c++ est un super ensemble de c et la syntaxe est plus stricte, alors faites attention au suffixe.

0
répondu Marcus Thornton 2014-08-12 08:44:41