locate stdio.h
または
mlocate stdio.h
しかし locate
データベースを更新していない場合は、データベースに依存しています
sudo updatedb
gcc
に問い合わせることもできます gcc
によってスキャンされるデフォルトのディレクトリを知る それ自体:
gcc -print-search-dirs
gcc -H ...
通常のコンパイルの副作用として、すべてのインクルード ファイルのフル パスを出力します。 -fsyntax-only
を使用 さらに、出力を作成しないようにします (プログラムにエラーがあるかどうかは引き続き通知されます)。例 (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
各行の先頭にあるドットは、#include
のネストの深さをカウントします
gcc を使用している場合は、次のような方法で特定のファイルをチェックできます:
echo '#include <stdbool.h>' | cpp -H -o /dev/null 2>&1 | head -n1
-H
含まれているすべてのファイルを再帰的に出力するようにプリプロセッサに要求します。 head -n1
そこから出力の最初の行だけを取得し、名前付きヘッダーに含まれるファイルを無視します (ただし、特に stdbool.h はおそらくそうではありません)。
たとえば、私のコンピューターでは、上記の出力:
. /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h
前処理中に、すべてのプリプロセッサ ディレクティブが実際のものに置き換えられます。マクロ展開、コードコメントの削除、ヘッダーファイルのソースコードを含むなど...
cpp
を使用して確認できます - C プリプロセッサ コマンド。
コマンドラインの例:
cpp Filename.c
前処理された出力を表示します。