Je suis à l'université et pour un projet que nous utilisons C. Nous avons exploré GCC et Clang, et Clang semble être beaucoup plus convivial que GCC. En conséquence, je me demande quels sont les avantages ou les inconvénients d'utiliser clang, par opposition à GCC, pour développer en C et C ++ sous Linux?
Dans mon cas, cela serait utilisé pour les programmes de niveau étudiant, pas pour la production.
Si j'utilise Clang, dois-je déboguer avec GDB et utiliser GNU Make, ou utiliser un autre débogueur et faire un utilitaire?
<atomic>
n'est pas pris en charge, peut-être que d'autres petites choses manquent ... Je ne peux pas l'utiliser, donc je ne suis pas tout à fait au courant).Réponses:
ÉDITER:
Les gars de gcc ont vraiment amélioré l'expérience de diagnostic en gcc (ah compétition). Ils ont créé une page wiki pour le présenter ici . gcc 4.8 a maintenant également de bons diagnostics (gcc 4.9x a ajouté la prise en charge des couleurs). Clang est toujours en tête, mais l'écart se resserre.
Original:
Pour les étudiants, je recommanderais sans réserve Clang.
Les performances en termes de code généré entre gcc et Clang ne sont plus claires (même si je pense que gcc 4.7 a toujours la tête, je n'ai pas encore vu de benchmarks concluants), mais pour les étudiants, l'apprendre n'a pas vraiment d'importance de toute façon.
D'un autre côté, les diagnostics extrêmement clairs de Clang sont certainement plus faciles à interpréter pour les débutants.
Considérez ce simple extrait de code:
Vous remarquerez tout de suite que le point-virgule est manquant après la définition de la
Student
classe, non :)?Eh bien, gcc le remarque aussi , d'une certaine manière:
Et Clang ne joue pas exactement ici non plus, mais quand même:
Je choisis délibérément un exemple qui déclenche un message d'erreur peu clair (provenant d'une ambiguïté dans la grammaire) plutôt que les exemples typiques «Oh mon dieu Clang lis mon esprit». Pourtant, nous remarquons que Clang évite le flot d'erreurs. Pas besoin d'effrayer les étudiants.
la source
À l'heure actuelle, GCC offre une prise en charge bien meilleure et plus complète des fonctionnalités C ++ 11 que Clang. De plus, le générateur de code pour GCC effectue une meilleure optimisation que celui de Clang (d'après mon expérience, je n'ai vu aucun test exhaustif).
D'un autre côté, Clang compile souvent le code plus rapidement que GCC, et produit de meilleurs messages d'erreur lorsqu'il y a quelque chose qui ne va pas avec votre code.
Le choix de celui à utiliser dépend vraiment de ce qui est important pour vous. J'apprécie plus le support C ++ 11 et la qualité de la génération de code que la commodité de la compilation. Pour cette raison, j'utilise GCC. Pour vous, les compromis pourraient être différents.
la source
J'utilise les deux car ils donnent parfois des messages d'erreur différents et utiles.
Le projet Python a pu trouver et corriger un certain nombre de petits bugs lorsque l'un des principaux développeurs a essayé de compiler pour la première fois avec clang.
la source
Je l' utilise aussi bien Clang et GCC, je trouve Clang a quelques avertissements utiles, mais pour mes propres repères ray-tracing - sa constante 5-15% plus lent que GCC (prendre ce avec un grain de sel bien sûr, mais a tenté d'utiliser des drapeaux d'optimisation similaires pour les deux).
Donc pour l'instant j'utilise l'analyse statique de Clang et ses avertissements avec des macros complexes: (bien que maintenant les avertissements de GCC soient à peu près aussi bons - gcc4.8 - 4.9).
Quelques considérations:
Clangs(QtCreator par exemple*****). EDIT: QtCreator prend désormais en charge la sortie de Clang***** - ces domaines sont en développement actif et pourraient bientôt être soutenus
la source
Pour les programmes de niveau étudiant, Clang a l'avantage d'être, par défaut, plus strict. la norme C. Par exemple, la version K&R suivante de Hello World est acceptée sans avertissement par GCC, mais rejetée par Clang avec quelques messages d'erreur assez descriptifs:
Avec GCC, vous devez le donner
-Werror
pour qu'il fasse vraiment remarquer que ce n'est pas un programme C89 valide. En outre, vous devez toujours utiliserc99
ougcc -std=c99
obtenir le langage C99.la source
gcc
devrait généralement être invoqué avec au moins-Wall
, ce qui avertit pour ce programme.clang
produit de bons avertissements / erreurs, cependant.gnu99
, etgnu++98
etgnu++0x
. Je pense que ce sont de véritables extensions , c'est-à-dire qu'elles compileront sans accroc du code conforme aux normes ISO. Voici les détails: pour C , pour C ++ .Je pense que clang pourrait être une alternative.
GCC et clang ont des différences sur des expressions telles que
a+++++a
, et j'ai de nombreuses réponses différentes avec mes pairs qui utilisent clang sur Mac pendant que j'utilise gcc.GCC est devenu la norme, et clang pourrait être une alternative. Parce que GCC est très stable et que le bruit est encore en développement.
la source
a+++++a
devrait échouer, car il est analysé commea ++ ++ + a
une erreur de syntaxe.