Dieses Projekt enthält Tools und Listen, um alle Warnflaggen herauszufinden, die Clang Compiler und GNU Compiler-Sammlung für C-Familiensprachen (C, C ++ und Objective-C) haben. Dies zeigt auch alle Aliase- und Warnflaggen, die ein bestimmtes Flag ermöglicht (vorangestellt mit "#" -Scharakter), damit Sie leicht erkennen können, welches Flag durch was aktiviert ist. Es gibt auch Warnflaggen, die nichts aus Gründen der Kompatibilität oder Abschaltungsgründe tun. Sie sind mit "# Dummy Switch" -Text suffixiert.
Der Zweck dieser Sammlungen ist es, die von Compilern bereitgestellten statischen Tools für statische Codeanalyse einfacher zu verwenden.
Clang enthält -Weverything
Flagge, die in diesen Listen nicht angezeigt wird, was alle Warnungen ermöglicht. Die Clang -Dokumentation liefert Referenz für einige der diagnostischen Flaggen in Clang.
Wenn Sie eine vollständige Liste der GCC -Warnoptionen für eine bestimmte Version von GCC benötigen, können Sie GCC mit gcc --help=warnings
um diese Liste zu erhalten. Andernfalls sind einige einfache GCC -Warnoptionenlisten unten verfügbar:
Ein Anwendungsfall für diese Art von Listen besteht darin, zu erkennen, welche Unterschiede zwischen verschiedenen Compilern und Compiler -Versionen bestehen. Ich habe rudimentäre Compiler-Flag-Unterschiede zwischen zwei konsequenten Compiler-Versionen als Diff-Files zur Verfügung gestellt. Für spezifischere Unterschiede müssen Sie jedoch einige (visuelle) Diff-Programme verwenden, wie unten gezeigt:
Dadurch wird Antlr als Parser -Generator mit einem unterstützenden Python -Code verwendet, um Warnflags von tatsächlichen Kompilierungsoptionsdatendateien zu analysieren. Weitere Anforderungen folgen (plus deren Abhängigkeiten):
Nachdem Sie alle Anforderungen installiert haben und Antlr mit antlr4
-Befehl ausführen können, verwenden Sie einfach die folgenden Befehle in parsers/
Verzeichnis, um diese Listen selbst zu generieren:
ninja
./parse-clang-diagnostic-groups.py <path-to-clang-source>/include/clang/Basic/DiagnosticGroups.td
./parse-gcc-warning-options.py <path-to-gcc-source>/gcc/{common.opt,c-family/c.opt}
Und Sie erhalten die Liste aller individuellen Warnflaggen und ihrer Abhängigkeiten, die sich in der angeforderten Compiler -Version befinden.
Um gefilterte Listen zu generieren, können Sie Schalter --top-level
und --unique
Schalter verwenden.
--top-level
enthält keine Warnungen, die von einem anderen Schalter in der Liste aktiviert sind.--unique
listet alle Warnungen ohne Informationen auf, welche anderen Warnungen sie ermöglichen. Diffs auf dieser Seite werden aus diesen Dateien erstellt. Es gibt einige Unit -Tests, bei denen die Funktionen auf niedriger Ebene getestet werden. Sie können die Zeit mit dem Befehl ninja test
in parsers/
verzeichnis fahren, um zu überprüfen, ob Unit -Tests bestehen.
Wenn Parser eine Änderung erhält, die sich auf die Formatierung oder andere Ausgabe für mehrere Dateien auswirkt, müssen diese Warnlisten nachgebildet werden. Es gibt process-clang-git.sh
und process-gcc-git.sh
-Skripte, die das Git-Repository-Root als erster Parameter anwenden und alle verschiedenen Varianten dieser Befehle anwenden, um endgültige Textdateien zu erstellen.