!!¡¡DESCARGO DE RESPONSABILIDAD!! Trabajo en una herramienta comercial de análisis estático (no en PC Lint). !!¡¡DESCARGO DE RESPONSABILIDAD!!
Hay varios problemas con un enfoque simple sin análisis:
1) Conjuntos de sobrecarga:
Es posible que una función sobrecargada tenga declaraciones que provengan de diferentes archivos. ¡Puede ser que la eliminación de un archivo de encabezado dé como resultado que se elija una sobrecarga diferente en lugar de un error de compilación! El resultado será un cambio silencioso en la semántica que puede ser muy difícil de rastrear después.
2) Especializaciones en plantillas:
Al igual que en el ejemplo de sobrecarga, si tiene especializaciones parciales o explícitas para una plantilla, desea que todas estén visibles cuando se utilice la plantilla. Es posible que las especializaciones para la plantilla principal se encuentren en diferentes archivos de encabezado. Eliminar el encabezado con la especialización no causará un error de compilación, pero puede resultar en un comportamiento indefinido si esa especialización hubiera sido seleccionada. (Ver: Visibilidad de la especialización de plantilla de la función C ++ )
Como lo señaló 'msalters', realizar un análisis completo del código también permite analizar el uso de la clase. Al verificar cómo se usa una clase a través de una ruta específica de archivos, es posible que la definición de la clase (y por lo tanto todas sus dependencias) se pueda eliminar por completo o al menos mover a un nivel más cercano a la fuente principal en la inclusión árbol.