2008-09-09 7 views
27

Normalmente, al escribir un código nuevo, descubre que falta un #include porque el archivo no se compila. Bastante simple, agregas el #include requerido. Pero luego refactoriza el código de alguna manera y ahora un par de directivas #include ya no son necesarias. ¿Cómo descubro cuáles ya no son necesarios?¿Cómo puedo automatizar la búsqueda de las directivas #include no utilizadas?

Por supuesto, puedo eliminar manualmente algunas o todas las líneas de #include y volver a agregarlas hasta que el archivo vuelva a compilarse, pero esto no es realmente factible en un proyecto grande con miles de archivos. ¿Hay alguna herramienta disponible que ayude a automatizar la tarea?

+1

Esta es otra pregunta que se relaciona directamente con esto: http://stackoverflow.com/questions/74326/how-should-i-detect-unnecessary-include-files-in-alarge-c-project. –

Respuesta

4

Puede usar PC-Lint/FlexeLint para hacer eso.

Inusualmente, no hay una versión de SO gratuita de la herramienta disponible.

Puede eliminar #includes pasando por referencia en lugar de pasar por valor y declarar hacia adelante. Esto se debe a que el compilador no necesita conocer el tamaño del objeto en el momento de la compilación. Sin embargo, esto requerirá una gran cantidad de trabajo manual en su nombre. Lo bueno es que reducirá tus tiempos de compilación.

+0

No pude encontrar ninguna documentación sobre pelusas que dijera que podría hacer esto. ¿Tienes un puntero? – staffan

+0

Lamentablemente, tampoco pude encontrarlo disponible gratuitamente. Tengo una licencia de PC-Lint, y puedo responder que está allí. Tal vez deberías contactar a Gimpel directamente? Pueden enviarle el extracto del manual. – JXG

+0

+ e766 // Incluye el archivo de cabecera FileName no utilizado en el módulo String –

3

Podrías escribir una herramienta de línea de comando de "fuerza bruta" que comente los #includes uno por uno y verifique si la compilación sigue funcionando. Avísame cuando lo tengas a funcionar. ; 0)

2

This article explica una técnica de eliminación de #include mediante el análisis de Doxygen. Es solo un script de Perl, así que es bastante fácil de usar.

+2

Lamentablemente, los enlaces en la página ya no funcionan. –

+0

@ graham.reeds corregidos. –

2

Hay una llamada includator Eclipse plugin que ayuda a administrar incluyen dependencias en proyectos de C/C++

http://includator.com/

0

Aquí es macro VC6 'fuerza bruta', que funciona con sencillo en el .cpp o .h archivo abierto en el editor comentando incluye por incluir y compilación de reproducción:

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

De carcasa, podría mejorarse para trabajar en todo el proyecto.

Cuestiones relacionadas