Da quello che so al momento non c'è strumento che fa tutte le cose che hai menzionato, ma ce n'è uno che aiuta a ripulire il inutilizzata includono intestazioni: include-what-you-use
"Includere ciò che si utilizza "significa questo: per ogni simbolo (tipo, funzione variabile o macro) che usi in foo.cc, foo.cc o foo.h dovrebbe #include un file .h che esporta la dichiarazione di quel simbolo. Lo strumento include-what-you-use è un programma che può essere compilato con le librerie clang per analizzare #inclusi dei file di origine per trovare le violazioni include-what-you-use e suggerire delle correzioni per esse.
L'obiettivo principale di include-what-you-use è rimuovere #inclusi superflui. Lo fa sia scoprendo che #include non sono effettivamente necessari per questo file (per entrambi i file .cc e .h), e sostituendo # include anche forward-dichiari quando possibile.
Ci si potrebbe aspettare che la Clang static analyzer farebbe questo, ma da quello che vedo the availalbe checks non offrire tali cose.
questo potrebbe essere un buon momento per qualcuno di suggest a feature request verso l'analizzatore o creare uno strumento separato con LibTooling alla pari simile con gli strumenti descritti in Clang Tools
Nel frattempo, io suggerirei di attivare - Muro e -Wextra flag di compilazione, che attiverà le seguenti avvertenze (tra gli altri) (vedi la documentazione di GCC sotto):
- -Wunused funzione
- -Wunused-label
- -Wunused valore
- -Wunused parametri -Wunused variabile
- set-parametro -Wunused-but-
Se per Qualche ragione per cui non vuoi farlo, potresti semplicemente aggiungere -Wunused che abiliterà solo le opzioni di -Wunused sopra, senza gli altri flag che -Wall o -Wextra aggiunge.
Ma al fine di ottenere un avvertimento circa un parametro di funzione non utilizzata, è necessario specificare -Wextra -Wunused (si noti che -Wall implica -Wunused), oppure separatamente specificare -Wunused-parametro.
Naturalmente, questo significa che si deve fare tale operazione manualmente
Se si vuole essere pignoli in più si potrebbe anche convertire tutti gli avvertimenti in errori con l'aggiunta del -pedantic -errors flag
Per ulteriori dettagli leggere lo GCC Warnings Options documentation.
Forse il [clang static analyzer] (http://clang-analyzer.llvm.org/) per l'analisi semantica? –
In realtà, clang avverte su variabili e funzioni non utilizzate anche durante la normale compilazione. – ltjax
Questo è più difficile di quanto sembri. Come fai a sapere se un # include è inutilizzato? Voglio dire che puoi avere qualcosa come un #define che mappa 'malloc()' su 'malloc_dbg()' lì e poi compila sia con che senza quel file, solo il comportamento cambia. – sharptooth