2013-04-12 4 views
9

La stratégie de l'entreprise stipule que chaque fonction du code source C a un prototype. J'ai hérité d'un projet avec son propre système make (donc je ne peux pas le tester sur gcc ou Visual Studio) et j'ai trouvé que l'un des fichiers avait des fonctions statiques déclarées sans prototypes. Existe-t-il un moyen (pas nécessairement avec un compilateur) de lister toutes les fonctions sans prototypes dans tous les fichiers .c?Comment trouver des fonctions C sans prototype?

+2

fonctions statiques ne ont pas vraiment besoin de prototypes, à moins qu'ils sont appelés avant qu'ils ne soient définis –

+0

@ Paul: Oui, mais je suppose que cela permet au gestionnaire de projet pour voir rapidement quelles sont les fonctions disponibles, etc. Si – Gnubie

+1

vous ne pouvez pas utiliser un autre compilateur, pour des raisons inconnues, vous devrez obtenir un outil d'analyse statique séparé. Tous ces outils sur le marché trouveront tous les prototypes manquants pour vous – Lundin

Répondre

12

gcc a une option pour vous avertir à ce sujet:

gcc -Wmissing-prototypes 

Vous pouvez activer cet avertissement en une erreur pour empêcher les gens de compilation et de force pour y remédier:

gcc -Werror=missing-prototypes 

Si vous voulez juste pour le lister vous pouvez compiler avec l'option gcc-Wmissing-prototypes et grep pour aucun prototype précédent pour dans le journal.

Mise à jour sur la base modifier:

Puisque vous mentionnez maintenant que vous ne pouvez pas utiliser gcc, vous devrez trouver une option similaire pour votre compilateur en cours. La plupart des compilateurs ont une telle option. Commencez par la page de manuel ou la sortie d'aide intégrée.

+0

Désolé si je ne l'ai pas précisé, mais il a son propre système de construction, donc je ne peux pas le tester sur gcc. – Gnubie

+5

"build system"! = "Compilateur". Je suppose que n'importe quel compilateur utilisé par ce système de construction personnalisé (gcc/icc/clang/.......) a plusieurs options/commutateurs pour activer les avertissements/erreurs/etc. Ce serait l'endroit pour commencer, même si ce n'est pas gcc ... – twalberg

+0

ok, je vais vérifier. Merci tout le monde! – Gnubie

5

ctags peut le faire!

--c-kinds=p génère la liste de tous les prototypes de fonction

--c-kinds=f génère la liste de toutes les définitions de fonction

Maintenant, vous avez juste besoin de comparer ceux-ci.

diff -u <(ctags -R -x --sort=yes --c-kinds=f | cut -d' ' -f1) <(ctags -R -x --sort=yes --c-kinds=p | cut -d' ' -f1) | sed -n 's/^-//p'

+0

+1 c'est une bonne solution! – jman

Questions connexes