locate stdio.h
oder
mlocate stdio.h
aber locate
stützt sich auf eine Datenbank, wenn Sie diese noch nie aktualisiert haben
sudo updatedb
Sie können auch gcc
erfragen um zu erfahren, welches die Standardverzeichnisse sind, die von gcc
gescannt werden selbst:
gcc -print-search-dirs
gcc -H ...
wird den vollständigen Pfad jeder Include-Datei als Nebeneffekt der regulären Kompilierung ausgeben. Verwenden Sie -fsyntax-only
zusätzlich dazu, dass es keine Ausgabe erzeugt (es wird Ihnen immer noch sagen, ob Ihr Programm Fehler hat). Beispiel (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
Die Punkte am Anfang jeder Zeile zählen, wie tief die #include
verschachtelt sind ist.
Wenn Sie gcc verwenden, können Sie eine bestimmte Datei mit etwas wie:
überprüfenecho '#include <stdbool.h>' | cpp -H -o /dev/null 2>&1 | head -n1
-H
fordert den Präprozessor auf, alle enthaltenen Dateien rekursiv zu drucken. head -n1
nimmt nur die erste Zeile der Ausgabe davon, um alle Dateien zu ignorieren, die im benannten Header enthalten sind (obwohl dies insbesondere bei stdbool.h wahrscheinlich nicht der Fall ist).
Auf meinem Computer werden beispielsweise die obigen Ausgaben ausgegeben:
. /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h
Während der Vorverarbeitung werden alle Präprozessoranweisungen durch die tatsächlichen ersetzt. Wie Makroerweiterung, Entfernung von Codekommentaren, einschließlich des Quellcodes der Header-Datei usw....
wir können es mit cpp
überprüfen - C PreProcessor-Befehl.
Zum Beispiel in der Kommandozeile:
cpp Filename.c
zeigt die vorverarbeitete Ausgabe an.