Z tego co wiem, nie ma obecnie narzędziem, które ma wszystkie rzeczy, które zostały wymienione, jednak jest jeden, który pomaga w oczyszczaniu się niewykorzystana zawierać nagłówki: include-what-you-use
"Dołącz czego używasz "oznacza to: dla każdego symbolu (typ, funkcja zmienna lub makro), którego używasz w foo.cc, albo foo.cc, albo foo.h powinien # dołączyć plik .h, który eksportuje deklarację tego symbolu. Narzędzie typu "włóż to, co lubisz" jest programem, który można zbudować za pomocą bibliotek klang , w celu przeanalizowania # zawartych plików źródłowych w celu znalezienia naruszeń związanych z tym, czego używasz, i zaproponowania dla nich poprawek.
Głównym celem dołączania-co-używasz jest usuwanie zbędnych #includes. Robi to zarówno poprzez zorientowanie się, co #includes nie jest faktycznie potrzebne dla tego pliku (zarówno dla plików .cc, jak i .h), i zastępująC#includes z forward-deklaruje, kiedy to możliwe.
Można by oczekiwać, że Clang static analyzer by to zrobić, ale z tego co widzę the availalbe checks nie oferują takich rzeczy.
To może być dobry moment, aby ktoś suggest a feature request do analizatora lub utworzyć osobne narzędzie przy użyciu LibTooling na podobnym równi z narzędzi opisanych w Clang Tools
W międzyczasie sugeruję włączyć - ściana i -Wextra kompilatora flagi, która wywoła następujące ostrzeżenia (między innymi) (patrz docs GCC poniżej):
- -Wunused funkcja
- -Wunused-label
- -Wunused wartość
- -Wunused zmiennej
- -Wunused parametr
- -Wunused ale ustawiony parametr
Jeśli dla z jakiegoś powodu nie chcesz tego zrobić, możesz po prostu dodać -Wunused, który umożliwi łączenie tylko powyższych opcji Nieaktywnych, bez innych flag, które -Wall lub -Wextra dodaje.
Jednak aby dostać ostrzeżenie o nieużywanym parametr funkcji, należy albo podać -Wextra -Wunused (zauważ, że -Wall implikuje -Wunused) lub oddzielnie określić -Wunused parametr.
Oczywiście oznacza to, że trzeba zrobić porządki ręcznie
Jeśli chcesz mieć dodatkową pedantyczny równie dobrze można przekonwertować wszystkie ostrzeżenia w błędy poprzez dodanie -pedantic -errors flag
Aby uzyskać więcej informacji przeczytaj GCC Warnings Options documentation.
Może [analizator statyczny klang] (http://clang-analyzer.llvm.org/) do analizy semantycznej? –
W rzeczywistości clang ostrzega o nieużywanych zmiennych i funkcjach nawet podczas normalnej kompilacji. – ltjax
To jest trudniejsze, niż się wydaje. Skąd wiadomo, że #include nie jest używany? Mam na myśli, że możesz mieć coś w stylu #define, które odwzorowuje 'malloc()' na 'malloc_dbg()', a następnie kompiluje zarówno z tym plikiem, jak i bez niego, tylko zachowanie się zmienia. – sharptooth