Ich bin im College und für ein Projekt verwenden wir C. Wir haben GCC und Clang untersucht, und Clang scheint viel benutzerfreundlicher zu sein als GCC. Infolgedessen frage ich mich, welche Vor- oder Nachteile die Verwendung von clang im Gegensatz zu GCC für die Entwicklung in C und C ++ unter Linux hat.
In meinem Fall würde dies für Programme auf Studentenebene verwendet, nicht für die Produktion.
Wenn ich Clang verwende, sollte ich mit GDB debuggen und GNU Make verwenden oder einen anderen Debugger und das Dienstprogramm make verwenden?
<atomic>
wird nicht unterstützt, vielleicht fehlen einige andere kleine Dinge ... Ich kann es nicht verwenden, daher bin ich nicht ganz auf dem neuesten Stand).Antworten:
BEARBEITEN:
Die gcc-Leute haben die Diagnoseerfahrung in gcc (ah Wettbewerb) wirklich verbessert. Sie haben eine Wiki-Seite erstellt, um sie hier zu präsentieren . gcc 4.8 hat jetzt auch eine recht gute Diagnose (gcc 4.9x hat Farbunterstützung hinzugefügt). Clang liegt immer noch an der Spitze, aber die Lücke schließt sich.
Original:
Für Studenten würde ich Clang bedingungslos empfehlen.
Die Leistung in Bezug auf den generierten Code zwischen gcc und Clang ist jetzt unklar (obwohl ich denke, dass gcc 4.7 immer noch die Führung hat, habe ich noch keine schlüssigen Benchmarks gesehen), aber für die Schüler ist es sowieso nicht wirklich wichtig, zu lernen.
Auf der anderen Seite ist Clangs äußerst klare Diagnose für Anfänger definitiv leichter zu interpretieren.
Betrachten Sie dieses einfache Snippet:
Sie werden sofort feststellen, dass das Semikolon nach der Definition der
Student
Klasse fehlt , oder :)?Nun, gcc bemerkt es auch auf eine Art und Weise:
Und Clang spielt auch hier nicht gerade die Hauptrolle, aber dennoch:
Ich wähle absichtlich ein Beispiel, das eine unklare Fehlermeldung auslöst (aufgrund einer Mehrdeutigkeit in der Grammatik), anstatt der typischen Beispiele "Oh mein Gott Clang, lies meine Gedanken". Trotzdem stellen wir fest, dass Clang die Flut von Fehlern vermeidet. Keine Notwendigkeit, Schüler abzuschrecken.
quelle
Ab sofort bietet GCC eine viel bessere und umfassendere Unterstützung für C ++ 11-Funktionen als Clang. Außerdem führt der Codegenerator für GCC eine bessere Optimierung durch als der in Clang (meiner Erfahrung nach habe ich keine erschöpfenden Tests gesehen).
Andererseits kompiliert Clang Code häufig schneller als GCC und erzeugt bessere Fehlermeldungen, wenn etwas mit Ihrem Code nicht stimmt.
Die Wahl, welche Sie verwenden möchten, hängt wirklich davon ab, welche Dinge für Sie wichtig sind. Ich schätze die Unterstützung von C ++ 11 und die Qualität der Codegenerierung mehr als die Bequemlichkeit der Kompilierung. Aus diesem Grund benutze ich GCC. Für Sie könnten die Kompromisse unterschiedlich sein.
quelle
Ich benutze beide, weil sie manchmal unterschiedliche, nützliche Fehlermeldungen geben.
Das Python-Projekt konnte eine Reihe kleiner Fehler finden und beheben, als einer der Kernentwickler zum ersten Mal versuchte, mit clang zu kompilieren.
quelle
Ich verwende sowohl Clang als auch GCC. Ich finde, Clang hat einige nützliche Warnungen, aber für meine eigenen Raytracing-Benchmarks - es ist durchweg 5-15% langsamer als GCC (nimm das natürlich mit Salzkorn, habe aber versucht, ähnliche Optimierungsflags zu verwenden für beide).
Daher verwende ich vorerst die statische Analyse von Clang und ihre Warnungen mit komplexen Makros: (obwohl die Warnungen von GCC jetzt ziemlich gut sind - gcc4.8 - 4.9).
Einige Überlegungen:
QtCreator zum Beispiel*****). BEARBEITEN: QtCreator unterstützt jetzt die Ausgabe von Clang***** - Diese Bereiche befinden sich in aktiver Entwicklung und werden möglicherweise bald unterstützt
quelle
Für Programme auf Studentenebene hat Clang den Vorteil, dass es standardmäßig strenger ist. der C-Standard. Beispielsweise wird die folgende K & R-Version von Hello World von GCC ohne Vorwarnung akzeptiert, von Clang jedoch mit einigen ziemlich beschreibenden Fehlermeldungen abgelehnt:
Bei GCC müssen Sie es geben
-Werror
, damit es wirklich darauf hinweist , dass es sich nicht um ein gültiges C89-Programm handelt. Außerdem müssen Sie noch die Sprache C99 verwendenc99
odergcc -std=c99
herunterladen.quelle
gcc
sollte im Allgemeinen mit mindestens aufgerufen werden-Wall
, was für dieses Programm warnt.clang
erzeugt jedoch gute Warnungen / Fehler.gnu99
undgnu++98
undgnu++0x
. Ich denke, das sind echte Erweiterungen , dh sie kompilieren problemlos den ISO-Standardcode. Hier sind die Details: für C , für C ++ .Ich denke, Clang könnte eine Alternative sein.
GCC und Clang haben einige Unterschiede in Bezug auf Ausdrücke wie
a+++++a
, und ich habe viele verschiedene Antworten mit meinem Kollegen, der Clang auf dem Mac verwendet, während ich gcc verwende.GCC ist zum Standard geworden, und Clang könnte eine Alternative sein. Weil GCC sehr stabil ist und Clang sich noch in der Entwicklung befindet.
quelle
a+++++a
sollte fehlschlagen, da es alsa ++ ++ + a
Syntaxfehler analysiert wird.