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


Quelle est la différence entre g ++ et gcc? Lesquels devraient être utilisés pour le développement général en C ++?


662
2017-10-05 20:25


origine


Réponses:


gcc et g++ sont les compilateurs-pilotes du compilateur Gnu Collection'(qui était autrefois une fois le' Gnu C Compilateur').

Même s'ils déterminent automatiquement quels backends (cc1  cc1plus ...) à appeler en fonction du type de fichier, sauf si elle est surchargée -x language, ils ont quelques différences.

La différence probablement la plus importante dans leurs valeurs par défaut est à quelles bibliothèques ils lient automatiquement.

Selon la documentation en ligne de GCC options de lien et comment g ++ est invoqué, g++ est équivalent à gcc -xc++ -lstdc++ -shared-libgcc (le 1er est une option du compilateur, le 2ème deux sont des options de linker). Cela peut être vérifié en exécutant les deux avec le -v option (elle affiche les commandes de la chaîne d'outils principale en cours d'exécution).


555
2017-10-05 20:26



GCC: Collection de compilateurs GNU

  • Référents vers toutes les langues supportées par le compilateur GNU.

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

Les principales différences

  1. gcc compilera: * .c / *. cpp comme C et C ++ respectivement.
  2. g ++ compilera: * .c / *. cpp mais ils seront tous traités comme des fichiers C ++.
  3. De plus, si vous utilisez g ++ pour lier les fichiers d'objets, il se connecte automatiquement dans les bibliothèques std C ++ (gcc ne le fait pas).
  4. gcc compiler les fichiers C a moins de macros prédéfinies.
  5. gcc compiler * .cpp et g ++ compiler * .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

352
2017-10-06 01:55



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

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

En un mot: si vous utilisez g ++, l'interface indiquera au lieur que vous voudrez peut-être lier avec les bibliothèques standard C ++. L'interface graphique de gcc ne le fera pas (elle pourrait aussi être liée si vous passez les bonnes options de la ligne de commande).


60
2017-10-05 20:29



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

Dans les coulisses, ils sont vraiment le même programme. Si je comprends bien, les deux décident de compiler un programme en C ou C ++ basé sur 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 d'être lié à la bibliothèque standard, gcc va faire la bonne chose; mais alors, alors g ++. Il n'y a donc aucune raison de ne pas utiliser g ++ pour le développement général en C ++.


15
2017-10-06 00:51



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

gcc a évolué à partir d'une seule langue "GNU C Compiler" pour devenir une "Collection de compilateurs GNU" multilingue. Le terme "GNU C Compiler" est encore utilisé parfois dans le contexte de la programmation 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, l'Ubuntu 16.04 man g++ commande renvoie le GCC(1) page de manuel.

le man gcc stipule que ...

g++ accepte principalement les mêmes options que gcc

et que le défaut ...

... utilisation de gcc n'ajoute pas la bibliothèque C ++. g++ est un programme   qui appelle GCC et spécifie automatiquement la liaison avec le C ++   bibliothèque. Il traite les fichiers .c, .h et .i comme des fichiers source C ++ au lieu de   C fichiers sources sauf si -x est utilisé. Ce programme est également utile quand   précompiler un fichier d'en-tête C avec une extension .h pour une utilisation en C ++   compilations.

Cherche le gcc pages man pour plus de détails sur l'option variances de gcc et g++.

Lequel devrait être utilisé pour le développement général en C ++?

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


15
2018-01-05 10:34



Je suis devenu intéressé par le problème et effectuer quelques expériences

  1. J'ai trouvé cette description icimais c'est très court.

  2. Ensuite, 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 des fichiers de test simples c89, c99 et c ++ 1998 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'essaye d'exécuter l'outil "gnu compiler 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 cela aussi

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

p.s. Fichiers de test

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

Résultats:

  1. Si l'on regarde l'arborescence des processus, il semble que gcc, et g ++ est backend à d'autres outils, qui dans mon environnement sont: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe

  2. gcc fonctionne bien comme métatool pour si vous avez une extension correcte ou régler correctement -std -x drapeaux. Voir ce


10
2018-03-16 16:30



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


9
2017-10-05 20:35



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

En faisant référence à la compilation C ++, il est habituel 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 de la langue; Cependant, le terme "G ++" est plus utile lorsque l'accent est mis sur la compilation de programmes C ++.

Vous pourriez lire plus ici.


9
2017-10-18 11:37