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++?
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).
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:
- gcc compilera: *.C.*/fichiers cpp en C et c++ respectivement.
- g++ compilera:*.C.*/fichiers cpp, mais ils seront tous traités comme des fichiers C++.
- 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).
- gcc compilant des fichiers C a moins de macros prédéfinies.
- 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
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).
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 quegcc
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
, oumachine-gcc
lors de la compilation croisée, oumachine-gcc-version
pour exécuter une version spécifique de GCC. quand vous compilez des programmes C++, vous devez invoquer GCC commeg++
à la place.
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++.
je me suis intéressé à la question et effectuer quelques expériences
-
j'ai trouvé cette description ici , mais elle est très courte.
-
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
-
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
-
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]
-
mais celui-ci fonctionne toujours sans erreurs
$ gcc -x c++ -std=c++98 test_cpp.c
-
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:
-
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
-
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
" 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 .
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++.
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.
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.