locate stdio.h
o
mlocate stdio.h
ma locate
si basa su un database, se non lo hai mai aggiornato
sudo updatedb
puoi anche chiedere gcc
per sapere quali sono le directory predefinite scansionate da gcc
stesso:
gcc -print-search-dirs
gcc -H ...
stamperà il percorso completo di ogni file di inclusione come effetto collaterale della normale compilazione. Usa -fsyntax-only
oltre a non creare alcun output (ti dirà comunque se il tuo programma ha errori). Esempio (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
I punti all'inizio di ogni riga contano quanto profondamente è nidificato il #include
è.
Se usi gcc, puoi controllare un file specifico con qualcosa come:
echo '#include <stdbool.h>' | cpp -H -o /dev/null 2>&1 | head -n1
-H
chiede al preprocessore di stampare in modo ricorsivo tutti i file inclusi. head -n1
prende solo la prima riga di output da questo, per ignorare tutti i file inclusi dall'intestazione denominata (anche se stdbool.h in particolare probabilmente non lo fa).
Sul mio computer, ad esempio, gli output precedenti:
. /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h
Durante la preelaborazione tutte le direttive del preprocessore verranno sostituite con le effettive. Come l'espansione delle macro, la rimozione dei commenti del codice, incluso il codice sorgente del file di intestazione ecc...
possiamo controllarlo usando cpp
- Comando C PreProcessor.
Ad esempio nella riga di comando:
cpp Filename.c
visualizza l'output preelaborato.