locate stdio.h
ou
mlocate stdio.h
mais locate
s'appuie sur une base de données, si vous ne l'avez jamais mise à jour
sudo updatedb
vous pouvez également vous renseigner gcc
pour savoir quels sont les répertoires par défaut qui sont scannés par gcc
lui-même :
gcc -print-search-dirs
gcc -H ...
imprimera le chemin complet de chaque fichier inclus comme effet secondaire de la compilation régulière. Utilisez -fsyntax-only
en plus de ne pas créer de sortie (il vous dira quand même si votre programme a des erreurs). Exemple (Linux, gcc-4.7) :
$ cat > test.c
#include <stdbool.h>
#include <stdio.h>
^D
$ gcc -H -fsyntax-only test.c
. /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdbool.h
. /usr/include/stdio.h
.. /usr/include/features.h
... /usr/include/x86_64-linux-gnu/bits/predefs.h
... /usr/include/x86_64-linux-gnu/sys/cdefs.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/gnu/stubs.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
.... /usr/include/x86_64-linux-gnu/gnu/stubs-64.h
.. /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h
.. /usr/include/x86_64-linux-gnu/bits/types.h
... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/bits/typesizes.h
.. /usr/include/libio.h
... /usr/include/_G_config.h
.... /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h
.... /usr/include/wchar.h
... /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h
.. /usr/include/x86_64-linux-gnu/bits/stdio_lim.h
.. /usr/include/x86_64-linux-gnu/bits/sys_errlist.h
Les points au début de chaque ligne comptent la profondeur d'imbrication du #include
est.
Si vous utilisez gcc, vous pouvez vérifier un fichier spécifique avec quelque chose comme :
echo '#include <stdbool.h>' | cpp -H -o /dev/null 2>&1 | head -n1
-H
demande au préprocesseur d'imprimer tous les fichiers inclus de manière récursive. head -n1
prend juste la première ligne de sortie de cela, pour ignorer tous les fichiers inclus par l'en-tête nommé (bien que stdbool.h en particulier ne le fasse probablement pas).
Sur mon ordinateur, par exemple, les sorties ci-dessus :
. /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h
Pendant le prétraitement, toutes les directives du préprocesseur seront remplacées par les valeurs réelles. Comme l'expansion des macros, la suppression des commentaires de code, y compris le code source du fichier d'en-tête, etc...
nous pouvons le vérifier en utilisant le cpp
- Commande du préprocesseur C.
Par exemple dans la ligne de commande :
cpp Filename.c
affiche la sortie prétraitée.