¿Cómo automatizo la búsqueda de directivas #include no utilizadas?

Por lo general, cuando escribe un nuevo código, descubre que le falta un #include porque el archivo no se comstack. Bastante simple, agregue el #include requerido. Pero luego refactoriza el código de alguna manera y ahora ya no se necesitan un par de directivas #include. ¿Cómo descubro cuáles ya no son necesarias?

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

Puedes usar PC-Lint / FlexeLint para hacer eso.

Inusualmente no hay una versión gratuita del sistema operativo de la herramienta disponible.

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

Simplemente puede escribir una herramienta de línea de comando ‘fuerza bruta’ que comente el #include uno por uno y compruebe si la comstackción aún funciona. Avísame cuando lo tengas para trabajar. ; 0)

Hay un plugin de Eclipse llamado include que ayuda a administrar las dependencias de inclusión en proyectos de C / C ++

http://includator.com/

Este artículo explica una técnica de #include eliminar mediante el análisis de Doxygen. Eso es solo un script de perl, por lo que es bastante fácil de usar.

Aquí está la macro VC6 de “fuerza bruta” que funciona en un único archivo .cpp o .h abierto en el editor comentando la inclusión y la comstackción en ejecució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 todo el proyecto.