12
votes

C / C ++: Comment comprendre la chaîne des fichiers d'en-tête pour une définition donnée?

dans Visual C ++, on peut trouver le fichier d'en-tête où tout nom (variable ou type) est défini en appuyant sur F12 dessus ou en choisissant Aller à la définition . Cette fonctionnalité est très utile, mais elle ne montre que l'emplacement «fort> emplacement final (fichier d'en-tête) où le nom est défini. Existe-t-il un moyen de comprendre la chaîne de fichiers d'en-tête qui conduisent de mon fichier source au fichier d'en-tête final pour un nom donné?

Par exemple, considérez ce code: < Pré> xxx

dans Visual C ++ 2010, si je recherche la définition de Taille_t dans ci-dessus MAIN.CPP , il atterrit moi dans un fichier Nommé Sourceannotations.h . Je sais que cette chaîne d'en-tête commence par stddef.h (que j'ai inclus) et se termine dans Sourceannotations.h . Comment comprendre les liens au milieu de cette chaîne?


2 commentaires

Si vous recherchez une touche de raccourci dans Visual Studio (TM) ou pour un plug-in Certified (TM) certifié (R) pour le faire, vous devriez probablement marquer votre question avec l'une des balises Visual Studio (TM) -Related .. .


Pavel: Je ne cherchais pas une telle touche. Mais, marquera-t-il avec VS de toute façon depuis une telle solution sera utile aussi :-)


3 Réponses :


1
votes

Vous pouvez utiliser des outils ingénierie inverse tels que Doxygen, Comprendre Analyst, etc. Cela vous aidera à comprendre le flux complet des variables, des appels de fonction.


1 commentaires

+1 Pour faire référence à la compréhension de C / C ++, mais cela nécessite toujours que vous puissiez ouvrir le graphique Inclure dans la compréhension et cliquez sur Ouvrir tous les incluant jusqu'à ce que vous trouviez le fichier inclus dans lequel la variable / type / constante est en fait définie. Alors, encore beaucoup de travail manuel. Mais, d'autre part, en effet très bon utilité.



1
votes

Dans votre boîte de dialogue Propriétés, sous C / C ++, préprocesseur, actionnez PreProcess dans un fichier. Si vous compilez MAIN.CPP, cela générera Main.I.

Vous pouvez ensuite regarder dans Main.Je et voir quel fichier inclut quel autre fichier.


1 commentaires

C'était aussi mon idée initiale (à l'aide de l'option de compilateur / p), mais de ce fichier généré. Je pense qu'il est toujours difficile de voir quelle est la "chaîne" réelle.



12
votes
  1. Faites un clic droit, "Propriétés du projet"
  2. "Propriétés de configuration" -> "C / C ++" -> "Avancé".
  3. SET "Afficher inclut" à "Oui".

    La hiérarchie complète des en-têtes sera imprimée dans la fenêtre de sortie lorsque vous compilez chaque fichier.


4 commentaires

Cela marche! Il ne montre pas la chaîne pour un certain nom, mais convient presque à mon besoin. Merci! :-)


Pour le curieux, la chaîne d'en-tête pour Taille_T en VC ++ 2010 s'est avérée être: STDDEF.H -> CRTDEFS.H -> Sal.h -> Sourceannotations.h


@Shwin: Vous n'obtiendrez pas une chaîne de dépendances exacte, car l'en-tête peut être inclus de plusieurs endroits. Ce qui est pire, C ++ permet de dupliquer les TypeDef au même type. Maintenant, vous avez un arbre, au lieu d'une chaîne.


Alex: Oui, je me rends compte que pour tout exemple du monde réel, l'inclusion aurait pu survenir de n'importe où. Mais cela reste un outil utile pour enquêter sur la chaîne d'en-tête.