Question

Tout en refacturant un ancien code, j'ai réalisé qu'un fichier d'en-tête particulier était plein de déclarations de fonctions pour des fonctions supprimées depuis longtemps du fichier .cpp. Est-ce que quelqu'un connaît un outil qui pourrait les trouver (et les éliminer) automatiquement?

Était-ce utile?

La solution

Vous pouvez si possible créer un fichier test.cpp pour les appeler tous. L’éditeur de liens marquera ceux qui n’ont pas de code comme étant non résolus. Ainsi, votre code de test n’aura besoin que de la compilation et ne vous inquiétez pas de son exécution.

Autres conseils

PC-lint peut être réglé à des fins spécifiques:

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

void foo(int );

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

et 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

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

Vous pouvez donc transmettre le numéro d’avertissement 752 à votre achat:

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

-e " * " supprimera tous les avertissements et + e752 activera celui-ci en particulier

Si vous indexez en code avec Doxygen, vous pouvez voir où chaque fonction est référencée. Cependant, vous devrez parcourir chaque classe (une page HTML par classe) et rechercher celles pour lesquelles rien ne pointe.

Vous pouvez également utiliser ctags pour générer la liste de toutes les fonctions du code, puis utiliser objdump ou un outil similaire pour obtenir la liste de toutes les fonctions des fichiers .o - puis comparer ces listes. Toutefois, cela peut être problématique en raison de la manipulation du nom.

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

J'ai un ftplugin C ++ pour vim valide. vérifier et signaler les fonctions incomparables - vimmers, la suite ftplugin n'est pas encore simple à installer. Le ftplugin est basé sur les résultats de ctags (d'où son heuristique peut être facilement adapté à d’autres environnements), il existe parfois des faux positifs dans le cas de fonctions inline.

HTH,

En plus de Doxygen (@Milan Babuskov), vous pouvez voir s’il existe des avertissements à ce sujet dans votre compilateur. Par exemple. gcc a -Wunused-function pour les fonctions statiques; -fdump-ipa-cgraph.

J'ai entendu parler de PC-Lint , mais j'imagine que c'est probablement trop cher pour vous. .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top