10
votes

Liste de tous les fichiers d'en-tête inclus par un fichier C

J'essaie de "armer" compiler un fichier C, il inclut de nombreux fichiers d'en-tête récursivement..Je essayez de trouver la liste de ces fichiers d'en-tête...Est-il un moyen plus facile de trouver la liste de tout l'en-tête. fichiers qu'il comprend?

c c++

3 commentaires

Oui, regardez dans le fichier .c. Ou alternativement, vous pouvez jeter un coup d'œil sur l'en-tête maître à l'aide de l'option de compilateur.


Voici un indice pour GCC: Stackoverflow.com/Questtions/42308 / ...


Pour Visual Studio MSDN.MicRosoft.com/fr -us / bibliothèque / hdkef6tk% 28v = vs.0% 29.aspx


3 Réponses :


13
votes

Vous pouvez utiliser le préprocesseur de GCC C avec une option de vidage de la liste des en-têtes incluses de manière récursive: xxx pré>

qui vous montrera tous les en-têtes inclus. P>

Vous allez Il est probablement nécessaire de lui donner les racines de tous les annuaires utilisés dans votre construction régulière. Exécutez-le de manière itérative, ajoutant plus de chemins jusqu'à ce que les erreurs s'arrêtent. P>

La forme complète de cette commande dans cette utilisation est la suivante: p>

cpp -M [-I include_directory *] path_to_c_file.c


4 commentaires

Ceci s'applique à nouveau pour quelle boîte à outils?


Ah, merci! J'ai connecté gcc -m ou g ++ -m La commande cpp et cette option particulière est nouvelle pour moi. Est-ce que cela traite également les fichiers de récursivement inclus? Oubliez cela, je l'ai eu c'est le préprocesseur autonome ...


Si vous ne voulez pas voir les en-têtes système, remplacez l'option -M avec -mm .


Comment répertorier la sortie -mm ??



0
votes

La plupart des compilateurs ont commuté pour les faire simplement prépréer le fichier. Quels moyens entre autres qu'ils développent tous #include dans un code réel. Et généralement, ils incluent un commentaire (un commentaire C approprié) sur la ligne d'origine incluent. Vous pouvez donc rechercher le code prétraité résultant pour tous ces commentaires pour collecter tous les en-têtes inclus.


2 commentaires

Ce n'est généralement pas un commentaire, mais une directive #line .


Et aussi: le commutateur est généralement -e (ou / e ).



2
votes

Selon http://gcc.gnu.org /onlinedocs/gcc/profrocessor-option.html#preProcessor-Options -H et -M option sont utiles à cet effet.

Une autre option consiste à utiliser http://www.doxygen.nl/ et générer une documentation de votre Projet, après cela, vous pouvez vérifier pour voir les dépendances des fichiers :), il est préférable qu'il supporte de nombreuses langues: C, C ++, Objective-C, C #, PHP, Java, Python, IDL (Corba et Microsoft Saveurs), Fortran, VHDL, TCL.


0 commentaires