!!AVERTISSEMENT!! Je travaille sur un outil commercial d'analyse statique (pas PC Lint). !!AVERTISSEMENT!!
Il y a plusieurs problèmes avec une approche simple sans analyse:
1) Ensembles de surcharge:
Il est possible qu'une fonction surchargée ait des déclarations provenant de différents fichiers. Il se peut que la suppression d'un fichier d'en-tête entraîne le choix d'une surcharge différente plutôt qu'une erreur de compilation! Le résultat sera un changement silencieux de sémantique qui peut être très difficile à retracer par la suite.
2) Spécialisations de modèles:
Similaire à l'exemple de surcharge, si vous avez des spécialisations partielles ou explicites pour un modèle, vous voulez qu'elles soient toutes visibles lorsque le modèle est utilisé. Il se peut que les spécialisations pour le modèle principal se trouvent dans des fichiers d'en-tête différents. La suppression de l'en-tête avec la spécialisation ne provoquera pas d'erreur de compilation, mais peut entraîner un comportement non défini si cette spécialisation avait été sélectionnée. (Voir: Visibilité de la spécialisation des modèles de la fonction C ++ )
Comme indiqué par «msalters», effectuer une analyse complète du code permet également d'analyser l'utilisation des classes. En vérifiant comment une classe est utilisée via un chemin spécifique de fichiers, il est possible que la définition de la classe (et donc de toutes ses dépendances) puisse être supprimée complètement ou au moins déplacée à un niveau plus proche de la source principale dans l'inclusion arbre.