2008-09-19 18 views
3

Lors de la refonte d'un ancien code, j'ai réalisé qu'un fichier d'en-tête particulier était rempli de déclarations de fonctions pour des fonctions depuis longtemps retirées du fichier .cpp. Est-ce que quelqu'un sait d'un outil qui pourrait trouver (et dépouiller) ces automatiquement?Outils pour rechercher des déclarations de fonction inutilisées?

Répondre

2

Vous pouvez si possible créer un fichier test.cpp pour les appeler tous, l'éditeur de liens signalera ceux qui n'ont pas de code comme non résolus, de cette façon, votre code de test n'a besoin que de compiler.

+0

Cela va finir par être un ensemble plus des additions pour chaque fonction qui est écrit. De plus, si un appel de fonction est manqué dans ce fichier de test qui ne fait rien, à un moment donné, il sera presque impossible de le savoir. –

+0

D'accord, je pensais plus comme un hors de tester la zone en cours de refactoring. Ce n'est pas une solution à long terme, une autre approche pourrait être d'utiliser la sortie VERBOSE sur l'éditeur de liens. – titanae

0

Si vous indexez sur du code avec Doxygen, vous pouvez voir d'où chaque fonction est référencée. Cependant, vous devrez parcourir chaque classe (1 page HTML par classe) et rechercher ceux qui n'ont rien de pointé vers eux. Vous pouvez également utiliser ctags pour générer une liste de toutes les fonctions du code, puis utiliser objdump ou un outil similaire pour obtenir la liste de toutes les fonctions dans les fichiers .o, puis comparer ces listes. Cependant, cela peut être problématique en raison du nom mangling.

0

Je ne pense pas qu'il existe une telle chose car certaines fonctions n'ayant pas de corps dans l'arborescence source réelle pourraient être définies dans une bibliothèque externe. Cela peut seulement être fait en créant un script qui fait une liste de fonctions déclarées dans un en-tête et vérifie si elles sont parfois appelées.

0

J'ai un C++ ftplugin for vim qui est capable de vérifier et de signaler des fonctions inégalées - vimmers, la suite ftplugin n'est pas encore facile à installer. Le ftplugin est basé sur les résultats de ctags (d'où son heuristic pourrait être facilement adapté à d'autres environnements), parfois il y a des faux positifs dans le cas de fonctions en ligne.

HTH,

0

En plus Doxygen (@Milan Babuskov), vous pouvez voir s'il y a des avertissements pour cela dans votre compilateur. Par exemple. gcc a la fonction -Wunused-pour les fonctions statiques; -fdump-ipa-cgraph.

0

J'ai entendu de bonnes choses à propos de PC-Lint, mais j'imagine que c'est probablement trop pour vos besoins.

+0

Pas si. PC-Lint est bon pour beaucoup de choses aussi bien que cela. N'oubliez pas de désactiver tous les avertissements et de les allumer lentement selon vos besoins. Vraiment, vous avez seulement besoin d'un noyau sélectionné d'environ 2 douzaines pour améliorer votre base de code.Être pédant et pelucheux au maximum rend votre code butt-laid. –

2

PC-lint peut être tunned pour but dédié:

J'ai testé le code suivant contre pour votre question:

void foo(int); 

int main() 
{ 
    return 0; 
} 
 
lint.bat test_unused.cpp 

et a obtenu le résultat suivant:

 
============================================================ 

--- Module: test_unused.cpp (C++) 

    --- Wrap-up for Module: test_unused.cpp 

Info 752: local declarator 'foo(int)' (line 2, file test_unused.cpp) not referenced 
test_unused.cpp(2) : Info 830: Location cited in prior message 

============================================================ 

Donc, vous pouvez passer le numéro d'alerte 752 pour votre puropse:

 
lint.bat -"e*" +e752 test_unused.cpp 

-e « * » supprimera tous les avertissements et + E752 se tourneront sur ce particulier un