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 ++?

gcc et g++ sont des pilotes de compilation du «Gnu Comstackr Collection » (qui était autrefois le «Gnu C Comstackr »).

Même s’ils déterminent automatiquement les cc1 cc1plus ( cc1 cc1plus …) à appeler en fonction du type de fichier, sauf en cas de substitution par le -x language , ils présentent certaines différences.

La différence probablement la plus importante dans leurs valeurs par défaut est de savoir quelles bibliothèques s’associent automatiquement.

Selon les options de lien de documentation en ligne de GCC et comment g ++ est invoqué , g++ est équivalent à gcc -xc++ -lstdc++ -shared-libgcc (le premier est une option du compilateur, les deuxièmes sont des options de l’éditeur de liens). Cela peut être vérifié en exécutant les deux avec l’option -v (il affiche les commandes de la chaîne d’outils backend en cours d’exécution).

GCC: Collection de compilateurs GNU

  • Des références à toutes les différentes langues sockets en charge par le compilateur GNU.

gcc: Compilateur GNU C
g ++: compilateur GNU C ++

Les principales différences:

  1. gcc comstackra: les fichiers * .c / *. cpp en C et C ++ respectivement.
  2. g ++ comstackra: les fichiers * .c / *. cpp, mais ils seront tous traités comme des fichiers C ++.
  3. Aussi, si vous utilisez g ++ pour lier les fichiers objects, il est automatiquement lié dans les bibliothèques std C ++ (gcc ne le fait pas).
  4. La compilation des fichiers C de gcc comporte moins de macros prédéfinies.
  5. comstackr gcc * .cpp et g ++ comstackr les fichiers * .c / *. cpp a quelques macros supplémentaires.

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

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

Pour c ++, vous devez utiliser g ++.

C’est le même compilateur (par exemple, la collection de compilateurs GNU). GCC ou G ++, choisissez simplement un autre frontal avec différentes options par défaut.

En bref: si vous utilisez g ++, le frontend indiquera à l’éditeur de liens que vous souhaitez éventuellement lier les bibliothèques standard C ++. Le front-end de gcc ne le fera pas (il pourrait aussi être lié avec eux si vous passez les bonnes options de ligne de commande).

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

gcc a évolué à partir d’un seul langage “GNU C Comstackr” pour devenir un “GNU Comstackr Collection” multilingue. Le terme “GNU C Comstackr” est encore utilisé parfois dans le contexte de la programmation en langage C.

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

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

L’ man gcc déclare que …

g++ accepte principalement 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 la liaison avec la bibliothèque C ++. Il traite les fichiers .c, .h et .i en tant que fichiers source C ++ à la place des fichiers source C, sauf si -x est utilisé. Ce programme est également utile lors de la précompilation d’un fichier d’en-tête C avec une extension .h à utiliser dans les compilations C ++.

Recherchez dans les pages de manuel gcc des détails sur les variantes des options de gcc et g++ .

Lequel devrait être utilisé pour le développement général du c ++?

gcc ou g++ peuvent être utilisés pour le développement C ++ général avec les parameters d’option applicables. Cependant, le comportement par défaut de g++ est plus naturellement aligné sur un développement centré sur C ++.

Bien que les commandes gcc et g ++ agissent de manière très similaire, g ++ est conçu pour être la commande que vous appelez pour comstackr un programme C ++; il est destiné à faire automatiquement la bonne chose.

Dans les coulisses, ils sont vraiment le même programme. Si je comprends bien, les deux décident de comstackr un programme en C ou en C ++ en fonction de l’extension du nom de fichier. Les deux sont capables de se lier à la bibliothèque standard C ++, mais seul g ++ le fait par défaut. Donc, si vous avez un programme écrit en C ++ qui n’a pas besoin de se lier à la bibliothèque standard, il arrivera que gcc agisse correctement; mais alors, g ++ serait aussi. Donc, il n’y a vraiment aucune raison de ne pas utiliser g ++ pour un développement C ++ général.

Je me suis intéressé à la question et j’ai effectué des expériences

  1. J’ai trouvé cette description ici , mais c’est très court.

  2. J’ai ensuite essayé d’expérimenter 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 comstackr les fichiers de test simples c89, c99 et c ++ 1998 et cela fonctionne bien pour moi avec des extensions correctes correspondant au langage

     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 d’exécuter l’outil “gnu comstackr collection” de cette manière:

     $ 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 ceci aussi

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

Fichiers de test ps

 $ 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  enum class Color : int{red,green,blue}; // scoped enum int main() { std::vector a {1,2,3}; // bracket initialization return 0; } 

Résultats:

  1. Si vous regardez l’arbre de processus, il semble que gcc et g ++ sont backend à d’autres outils, qui dans mon environnement sont: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe

  2. gcc fonctionne bien comme metatool si vous avez une extension correcte ou si vous définissez des indicateurs corrects -std -x. Voir ça

«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 des programmes C (l’abréviation étant autrefois «GNU C Comstackr»).

En faisant référence à la compilation C ++, il est courant d’appeler le compilateur «G ++». Comme il n’y a qu’un seul compilateur, il est également correct de l’appeler «GCC», quel que soit le contexte linguistique. Cependant, le terme «G ++» est plus utile lorsque l’accent est mis sur la compilation de programmes C ++.

Vous pouvez en lire plus ici .

La seule différence notable est que si vous transmettez un .c à gcc, il sera compilé en C, alors que g ++ le traitera toujours comme C ++.

Je testais gcc et g ++ dans un système Linux. En utilisant MAKEFILE, je peux définir le complément utilisé par “GNU make”. J’ai testé avec la fonctionnalité de localisation dite “mémoire dynamic” de “C plus plus” en:

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

Seul g ++ peut être compilé avec succès sur mon ordinateur alors que gcc signalera une erreur

 undefined reference to `operator new(unsigned long)' 

Donc, ma propre conclusion est que gcc ne supporte pas complètement “C plus plus”. Il semble que choisir g ++ pour les fichiers source C ++ est une meilleure option.

gcc et g ++ sont tous deux des compilateurs GNU. Ils comstacknt tous les deux c et c ++. La différence réside dans le fait que les fichiers * .c gcc le traitent comme un programme ac et g ++ le considère comme un programme ac ++. Les fichiers * .cpp sont considérés comme des programmes c ++. c ++ est un super ensemble de c et la syntaxe est plus ssortingcte, alors faites attention au suffixe.