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
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.
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.
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.
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,
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.
J'ai entendu de bonnes choses à propos de PC-Lint, mais j'imagine que c'est probablement trop pour vos besoins.
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. –
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
- 1. overhead à "using" déclarations inutilisées?
- 2. Visual Studio Debugger ne pas entrer dans les déclarations de variables inutilisées
- 3. Trouver des fonctions Javascript inutilisées?
- 4. Outils pour trouver des noms de domaine
- 5. Quels outils de données FoxPro puis-je utiliser pour rechercher des données endommagées?
- 6. PHP AOP préparé des déclarations
- 7. Des outils pour optimiser javascript?
- 8. Bénéfice de performance des déclarations de variables dans VBA?
- 9. Comment connaître les numéros de ligne des déclarations/boucles locales dans une fonction C
- 10. Cocoa -/+ déclarations
- 11. Rechercher TreeViewItem pour supprimer des données
- 12. Comment identifier les colonnes inutilisées/redondantes en fonction d'une liste de tables?
- 13. Comment puis-je supprimer des classes CSS inutilisées de mon projet de site Web?
- 14. Outils pour développer des services Web RESTful
- 15. Outils pour manipuler des fichiers PowerPoint
- 16. Comment automatiser la recherche de directives #include inutilisées?
- 17. Déclarations de commutation séparées multiples
- 18. Suppression des colonnes inutilisées d'un diagramme à barres
- 19. Déclarations de type dans Fortran
- 20. Outils de profilage pour GUI
- 21. Des outils pour obtenir des métriques de désabonnement de code pour un référentiel Subversion?
- 22. Les déclarations statiques ne sont pas prises en compte pour une fonction si la fonction n'est pas qualifiée
- 23. macros et déclarations IF
- 24. F # déclarations de type forward
- 25. rechercher des alias DNS
- 26. Suivi des déclarations d'espace de noms avec XMLWriter
- 27. Outils client pour Oracle?
- 28. Élimination des ressources inutilisées dans l'application C# winform GLOBALLY
- 29. Comment rechercher usenet pour des questions de programmation?
- 30. Déclaration de modèle pour rechercher dynamiquement des vues dans RoR
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. –
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