Question

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

Était-ce utile?

La solution

gcc et g ++ sont des pilotes de compilation du Collection du compilateur GNU (qui était autrefois uniquement le C de GNU Compilateur ).

Même s'ils déterminent automatiquement quels backends ( cc1 cc1plus ...) à 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 la plus importante sans doute en ce qui concerne leurs valeurs par défaut réside dans les bibliothèques avec lesquelles elles sont automatiquement reliées.

Selon la documentation en ligne de GCC, options de lien et comment g ++ est appelé , g ++ est équivalent à gcc -xc ++ -lstdc ++ -shared-libgcc (le premier est une option du compilateur, les deux derniers 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 principale exécutées).

Autres conseils

GCC: Collection du compilateur GNU

  • Références aux différentes langues prises en charge par le compilateur GNU.

gcc: GNU C & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Compilateur
g ++: Compilateur GNU C ++

Les principales différences:

  1. gcc compilera: * .c / *. cpp les fichiers en C et C ++, respectivement.
  2. g ++ compilera: * .c / *. cpp mais tous seront traités comme des fichiers C ++.
  3. De même, si vous utilisez g ++ pour lier les fichiers objet, il est automatiquement lié dans les bibliothèques C ++ standard (gcc ne le fait pas).
  4. La compilation de fichiers C par gcc comporte moins de macros prédéfinies.
  5. La compilation de fichiers * .cpp et g ++ à la compilation de fichiers * .c / *. cpp contient 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 ++ choisissent simplement un autre front-end avec différentes options par défaut.

En résumé: si vous utilisez g ++, l’interface indiquera à l’éditeur de liens que vous souhaiterez peut-être créer un lien avec les bibliothèques standard C ++. L’interface gcc ne le fera pas (elle pourrait également être reliée si vous passez les bonnes options en ligne de commande).

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

gcc a évolué à partir d'un langage unique "GNU C Compiler". être une "collection GNU Compiler" multilingue. Le terme "Compilateur GNU C" est encore utilisé parfois dans le contexte de la programmation C.

Le g ++ est le compilateur C ++ de la collection de compilateurs GNU. De même que gnat est le compilateur Ada 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) .

Les man gcc d'Ubuntu 16.04 et 18.04 déclarent que ...

  

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

et que la valeur par 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 le C ++   bibliothèque. Il traite les fichiers .c, .h et .i en tant que fichiers sources C ++ au lieu de   Fichiers source C sauf si -x est utilisé. Ce programme est également utile lorsque   précompilation d'un fichier d'en-tête C avec une extension .h pour une utilisation en C ++   compilations.

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

Lequel devrait-on utiliser pour le développement général c ++?

Techniquement, gcc ou g ++ peut être utilisé pour le développement C ++ général 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 a ajouté le paragraphe suivant:

  

La manière habituelle d’exécuter GCC consiste à 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. Lorsque vous compilez des programmes C ++, vous devez appeler GCC en tant que g ++ .

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

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

En coulisse, c’est vraiment le même programme. Si je comprends bien, les deux décident de compiler un programme en C ou en C ++ en fonction de l’extension du nom de fichier. Les deux sont capables de lier 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’a pas besoin d’être lié à la bibliothèque standard, gcc fera ce qu’il faut; mais alors, il en serait de même pour g ++. Il n’ya donc aucune raison de ne pas utiliser g ++ pour le développement général en C ++.

Je me suis intéressé à la question et ai effectué quelques expériences

  1. J'ai trouvé cette description ici , mais 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. Cela fonctionne bien pour moi avec des extensions correctes pour 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 lorsque j'essaie d'exécuter la "collection du compilateur GNU" " outil 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 erreur

    $ 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 vous regardez l'arborescence des processus, il semble que gcc, et g ++, est un backend pour d'autres outils, qui dans mon environnement sont: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe

  2. gcc fonctionne très bien comme metatool si vous avez l’extension ou le paramètre correct -std -x flags. Voir ceci

& # 8220; GCC & # 8221; est un terme abrégé courant pour la collection de compilateurs GNU. Il s’agit à la fois du nom le plus général du compilateur et du nom utilisé lorsque l’accent est mis sur la compilation de programmes C (l’abréviation désignant jadis & # 8220; Compilateur GNU C & # 8221;).

Lorsque vous vous référez à la compilation C ++, il est habituel d'appeler le compilateur & # 8220; G ++ & # 8221 ;. Puisqu'il n'y a qu'un compilateur, il est également correct de l'appeler & # 8220; GCC & # 8221; peu importe le contexte linguistique; cependant, le terme & G08220; G ++ & # 8221; est plus utile lorsque l’accent est mis sur la compilation de programmes C ++.

Vous pouvez en lire plus à propos de ici .

Je testais gcc et g ++ sur un système linux. En utilisant MAKEFILE, je peux définir le complément utilisé par "GNU make". J'ai testé avec la soi-disant "mémoire dynamique". fonction de localisation de " C 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 alors que gcc signalera une erreur

undefined reference to `operator new(unsigned long)'

Donc, ma propre conclusion est que gcc ne supporte pas totalement "C plus plus". Il semble que la meilleure option soit de choisir g ++ pour les fichiers source C ++.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top