locate stdio.h
nebo
mlocate stdio.h
ale locate
spoléhá na databázi, pokud jste ji nikdy neaktualizovali
sudo updatedb
můžete se také zeptat gcc
abyste věděli, jaké jsou výchozí adresáře, které jsou skenovány pomocí gcc
sám:
gcc -print-search-dirs
gcc -H ...
vytiskne úplnou cestu každého začleněného souboru jako vedlejší efekt běžné kompilace. Použijte -fsyntax-only
kromě toho, aby nevytvářel žádný výstup (stále vám řekne, zda má váš program chyby). Příklad (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
Tečky na začátku každého řádku počítají, jak hluboko je vnořeno #include
je.
Pokud používáte gcc, můžete zkontrolovat konkrétní soubor pomocí něčeho jako:
echo '#include <stdbool.h>' | cpp -H -o /dev/null 2>&1 | head -n1
-H
požádá preprocesor, aby rekurzivně vytiskl všechny zahrnuté soubory. head -n1
bere z toho pouze první řádek výstupu, aby se ignorovaly všechny soubory obsažené v pojmenované hlavičce (ačkoli konkrétně stdbool.h pravděpodobně ne).
Na mém počítači například výše uvedené výstupy:
. /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h
Během předběžného zpracování budou všechny direktivy preprocesoru nahrazeny skutečnými. Stejně jako rozšíření makra, odstranění komentáře ke kódu, včetně zdrojového kódu souboru záhlaví atd...
můžeme to zkontrolovat pomocí cpp
- Příkaz C PreProcessor.
Například v příkazovém řádku:
cpp Filename.c
zobrazí předzpracovaný výstup.