procesos - ¿Cómo automatizo la búsqueda de las directivas#include no utilizadas?
como automatizar tu habitacion con arduino (5)
Podrías simplemente escribir una herramienta de línea de comando de "fuerza bruta" que comente los #includes uno por uno y verifique si la compilación todavía funciona. Avísame cuando lo tengas a funcionar. ; 0)
Normalmente, al escribir un código nuevo descubre que le 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?
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?
Hay un plugin de Eclipse llamado includator que ayuda a administrar dependencias incluidas en proyectos C / C ++
Aquí está la macro VC6 de ''fuerza bruta'' que funciona en un solo archivo .cpp o .h abierto en el editor al comentar incluir incluir y ejecutar la compilació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 caso, podría mejorarse para trabajar en un proyecto completo.
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.
Este artículo 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.