Von dem, was ich weiß, gibt es derzeit kein Werkzeug, das alle Dinge tut Sie erwähnt haben, jedoch ist es eine, die die nicht verwendete enthalten Header bei der Säuberung hilft: include-what-you-use
"Fügen Sie, was Sie verwenden "bedeutet dies: für jedes Symbol (Typ, Funktion Variable oder Makro), die Sie in foo.cc verwenden, sollte entweder ### foo.cc oder foo.h # eine .h-Datei enthalten, die die Deklaration dieses Symbols exportiert. Das include-what-you-use-Tool ist ein Programm, das mit den clang-Bibliotheken erstellt werden kann, um #includes von Quelldateien zu analysieren, um include-what-you-use-Verstöße zu finden und Korrekturen für sie vorzuschlagen.
Das Hauptziel von include-what-you-use ist die Entfernung überflüssiger #includes. Dies geschieht, indem Sie herausfinden, welche # includes für diese Datei (für .cc- und .h-Dateien) nicht benötigt werden, und ersetzt # includes mit forward-deklariert, wenn möglich.
Man könnte erwarten, dass die Clang static analyzer dies tun würde, aber von dem, was ich sehe, the availalbe checks bieten keine solche Dinge.
Dies könnte eine gute Zeit für jemanden suggest a feature request an den Analysator sein oder ein separates Werkzeug mit den bei Clang Tools
In der Zwischenzeit beschriebenen Tools LibTooling auf einem ähnlichen Niveau erstellen, würde ich Sie ermöglichen vorschlagen - Wand und -Wextra Compiler-Flags, die die folgenden Warnungen auslösen (unter anderem) (siehe die GCC-Dokumentation unten):
- -Wunused-Funktion
- -Wunused-label
- -Wunused-Wert
- -Wunused variable
- -Wunused-Parameter
- -Wunused-but-Set-Parameter
Wenn für Irgendein Grund, warum du das nicht willst, du könntest einfach -Wunused hinzufügen, was nur die oben genannten -Verwendeten Optionen kombiniert, ohne die anderen Flags, die -Wall oder -Wextra hinzufügen.
Um aber eine Warnung über einen nicht verwendeten Funktionsparameter zu bekommen, Sie müssen entweder angeben -Wextra -Wunused (beachten Sie, dass -Wall -Wunused impliziert) oder separat -Wunused-Parameter angeben.
Natürlich bedeutet dies, dass Sie die Bereinigung zu tun haben, manuell
Wenn Sie möchten, dass Sie zusätzliche pedantisch sein könnte genauso gut alle Warnungen in Fehler umwandeln, indem Sie die -pedantic Fehler Flagge
Für weitere Details lesen Sie die GCC Warnings Options documentation.
Vielleicht der [Clang Static Analyzer] (http://clang-analyzer.llvm.org/) für die semantische Analyse? –
Tatsächlich warnt clang selbst während der normalen Kompilierung nicht verwendete Variablen und Funktionen. – ltjax
Das ist schwieriger als es scheint. Woher weißt du, ob ein #include ungenutzt ist? Ich meine, Sie können etwas wie eine #define haben, die 'malloc()' auf 'malloc_dbg()' dort einbaut und dann sowohl mit als auch ohne diese Datei kompiliert, ändert sich nur das Verhalten. – sharptooth