Parfois avec une structure d'en-tête complexe, il se produit une partie d'en-tête est incluse, mais il est difficile de dire d'où allez. P>
Y a-t-il un peu d'outil (Viewer Depedency?) ou une méthode Comment trouver la "pile d'inclusion" (quelle source / quel en-tête / quel en-tête / ...) comprend un fichier d'en-tête particulier? P>
Si le fichier d'en-tête est inclus plusieurs fois, la recherche d'une première inclusion est suffisante, la recherche de toutes les inclusions est un bonus de bienvenue. P>
4 Réponses :
Une approche un peu haçonneuse (mais qui devrait fonctionner sur n'importe quelle plate-forme / boîte à outils, sans avoir besoin d'un analyseur de dépendance distinct) est simplement d'ajouter un #Error code> en haut de l'en-tête inclus - vous allez Ensuite, obtenez une erreur de compilation à partir du premier fichier
.cpp code> qui y comprend. p>
Nice et "portable" (pas d'outils spéciaux nécessaires) idée. Un inconvénient est des en-têtes (par exemple les bibliothèques standard) ne peut être lu que pour vous ou les toucher peut entraîner une reconstruction excessive à la suite d'une utilisation fréquente.
@Suma: Si vous souhaitez éviter de modifier un en-tête standard, placez votre propre copie temporaire avec #Error code> ajouté tôt sur le chemin Inclure.
L'en-tête que vous recherchez peut ne pas être directement inclus dans le fichier source. Vous devez "préprocéder_only" le code. Cela peut être fait en G ++ en utilisant l'option -E; Je n'en sais pas assez sur Visual C pour savoir quelle est la spécification exacte, mais si vous regardez dans l'aide pour «Preprocess», vous pouvez trouver quelque chose. P>
Quelqu'un a posté à ce sujet mais je ne trouve pas cette réponse. Donc, en VS, allez à vos propriétés de votre projet. Choisissez Propriétés de configuration / C / C ++ / Advanced / Afficher inclut et définissez «Oui».
Compilez ensuite votre fichier CPP. Cela ressemble à ceci: Fichier CPP: P>
1>------ Build started: Project: stlport_project, Configuration: Release Win32 ------ 1>Compiling... 1>stlport_project.cpp 1>Note: including file: D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stdio.h 1>Note: including file: D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stl/_prolog.h 1>Note: including file: D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stl/config/features.h
g ++ -m stlport_project.cpp code>. Vérifie ça.
@Sergeikurenkov avez-vous une idée de la façon de faire la même chose à QtCreator?
Directement dans le Visual Studio J'ai trouvé une option appelée / showinclLUes - La sortie est textuelle uniquement, mais en retrait d'une manière qui rend la lecture assez facile: p>
Note: including file: /*..path.anonymized..*/\TCMalloc\windows\config.h Note: including file: /*..path.anonymized..*/\memalloc\tcmalloc\windows/port.h Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windows.h Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\excpt.h Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\crtdefs.h Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\sal.h Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\vadefs.h Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\stdarg.h Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windef.h Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\ctype.h Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\crtdefs.h
Grep ne suffit pas, à cause des inclusions indirectes (c'est ce que je voulais dire par une structure d'en-tête complexe, je devrais peut-être être plus claire).
Ou utilisez un référenceur croisé (AKA 'GREP sur les stéroïdes') tels que OpenGrok a>. Bien que cela ne vous aide toujours pas à trouver des inclusions indirectes.
DOXYGEN peut produire des graphiques, mais il peut être assez lent pour analyser de très grandes grosses basses basses.
@Neil: grep n'aidera pas avec les en-têtes que
#include code> autres en-têtes. Et s'il y a une inclusion conditionnelle, appelez à nouveau Grep sur les résultats du premier GREP ne donnera pas de résultats utiles.