2008-09-09 5 views
27

En règle générale, lorsque vous écrivez un nouveau code, vous découvrez qu'il vous manque #include car le fichier n'est pas compilé. Assez simple, vous ajoutez le #include requis. Mais plus tard, vous refactorisez le code en quelque sorte et maintenant quelques directives #include ne sont plus nécessaires. Comment puis-je savoir lesquels ne sont plus nécessaires?Comment automatiser la recherche de directives #include inutilisées?

Bien sûr, je peux supprimer manuellement certaines ou toutes les lignes #include et les rajouter jusqu'à ce que le fichier compile à nouveau, mais ce n'est pas vraiment réalisable dans un grand projet avec des milliers de fichiers. Existe-t-il des outils disponibles pour automatiser les tâches?

+1

Ceci est une autre question qui se rapporte directement à ceci: http://stackoverflow.com/questions/74326/how-should-i-detect-unnecessary-include-files-in-a-large-c-project. –

Répondre

4

Pour ce faire, vous pouvez utiliser PC-Lint/FlexeLint.

Exceptionnellement, il n'existe pas de version gratuite de l'outil disponible.

Vous pouvez supprimer #includes en passant par référence au lieu de passer par valeur et de déclarer en avant. C'est parce que le compilateur n'a pas besoin de connaître la taille de l'objet au moment de la compilation. Cela nécessitera une grande quantité de travail manuel en votre nom cependant. La bonne chose est que cela réduira vos temps de compilation.

+0

Je n'ai pas trouvé de document de charpie disant qu'il pouvait le faire. Avez-vous un pointeur? – staffan

+0

Malheureusement, je ne pouvais pas non plus le trouver librement disponible. J'ai une licence PC-Lint, et je peux garantir qu'elle est là. Peut-être devriez-vous contacter Gimpel directement? Ils peuvent vous envoyer l'extrait du manuel. – JXG

+0

+ e766 // Inclure le fichier d'en-tête FileName non utilisé dans le module String –

3

Vous pouvez simplement écrire un outil de ligne de commande 'brut force' qui commente les #include un par un et teste si la compilation fonctionne encore. Dites-moi quand vous l'avez fait fonctionner. ; 0)

2

This article explique une technique de retrait #include en utilisant l'analyse de Doxygen. C'est juste un script Perl, donc c'est assez facile à utiliser.

+2

Malheureusement, les liens de la page ne fonctionnent plus. –

+0

@ graham.reeds fixe. –

2

Il y a un plugin Eclipse appelé includator qui aide à gérer inclure les dépendances en C/C++ projets

http://includator.com/

0

Voici macro VC6 'brute force' qui fonctionne sur simple Cpp ou .h fichier ouvert dans l'éditeur en commentant notamment par inclure et la compilation de fonctionnement:

Sub RemoveNotUsedIncludes() 

'Check if already processed; Exit if so 
ActiveDocument.Selection.FindText "//INCLUDE NOT USED", dsMatchFromStart 
IF ActiveDocument.Selection <> "" THEN 
    ActiveDocument.Selection.SetBookmark 
    MsgBox "Already checked" 
    ActiveDocument.Selection.ClearBookmark 
    EXIT SUB 
END IF 

'Find first #include; Exit if not found 
ActiveDocument.Selection.FindText "#include", dsMatchFromStart 
IF ActiveDocument.Selection = "" THEN 
    MsgBox "No #include found" 
    EXIT SUB 
END IF 

Dim FirstIncludeLine 
FirstIncludeLine = ActiveDocument.Selection.CurrentLine 

FOR i=1 TO 200 

    'Test build 
    ActiveDocument.Selection.SetBookmark 
    ActiveDocument.Selection = "//CHECKING... #include" 
    Build 
    ActiveDocument.Undo 
    ActiveDocument.Selection.ClearBookmark 

    IF Errors = 0 THEN 
     'If build failed add comment 
     ActiveDocument.Selection.EndOfLine 
     ActiveDocument.Selection = " //INCLUDE NOT USED" 
    END IF 

    'Find next include 
    ActiveDocument.Selection.EndOfLine 
    ActiveDocument.Selection.FindText "#include" 

    'If all includes tested exit 
    IF ActiveDocument.Selection.CurrentLine = FirstIncludeLine THEN EXIT FOR 

NEXT 

End Sub

Dans le cas où il pourrait être amélioré pour travailler sur l'ensemble du projet.

Questions connexes