includeできているヘッダーの場所を調べるというとき、お使いのコンパイラーによっては割と簡単に調べらるかも知れません。
例えばgcc(GNU C Compiler)を使っているなら
-Eオプション
などとするとincludeしたヘッダーが実際にどこから読み込まれたか標準出力に出てくるのでそれをlessなどで眺めながら探せそうです。
Cのソースファイル
gcc -Eでコンパイルしたときの標準出力の結果
# 1 "ss.c"
# 1 "<組み込み>"
# 1 "<コマンドライン>"
# 1 "ss.c"
# 1 "/usr/include/sys/time.h" 1 3 4 <==これ
# 42 "/usr/include/sys/time.h" 3 4
# 1 "/usr/include/_ansi.h" 1 3 4
# 10 "/usr/include/_ansi.h" 3 4
...
本来このオプションはプリプロセッサーを通じてソースファイルの内容が実際にどのように展開されるかを確認するためにあるのだと思いますが、ヘッダーの場所もたまたま出てるので使ってもよい気がしました。
追記: asmさんにご指摘いただいたようにgccだと-Hの方がずっと見やすいです。-Hですとヘッダーの場所がどこかとヘッダーの依存関係が視覚的にわかりやすく出てきます。
bash
1$ gcc -H -c ss.c
2. /usr/include/sys/time.h
3.. /usr/include/_ansi.h
4... /usr/include/newlib.h
5.... /usr/include/_newlib_version.h
6... /usr/include/sys/config.h
7以下省略
そういえばmakefileのヘッダーの依存関係を自動生成する方法があったと思い、も少し調べてみると-Mオプションなんかもいいと思いました。
bash
1$ gcc -M ss.c
2ss.o: ss.c /usr/include/sys/time.h /usr/include/_ansi.h \
3 /usr/include/newlib.h /usr/include/_newlib_version.h \
4 /usr/include/sys/config.h /usr/include/machine/ieeefp.h \
5以下省略
こちらはmakeのための依存行をもろに出すものですが-Hと同様どこにヘッダーがあるかそのものを出力してくれます。自動的に依存関係を考慮するようなmakefileをほとんど書いたことがないので-Mがすぐに出てきませんでした。また-Hの方は全然知りませんでした(^^;
ご指摘ありがとうございました。>asmさん
-vオプション
bash
1$ gcc -v -c ss.c
2...
3#include <...> の探索はここから始まります:
4 /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/include
5 /usr/include
6 /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/../../../../lib/../include/w32api
7探索リストの終わりです。
8...
のように様々なコンパイラーの情報とともにシステムヘッダーがどのディレクトリーから探されるかも表示されるのでfindなどを使うと見つけやすいと思います。g++でも同様のオプションがあります。
ただ特定のヘッダの場所を調べるなら-Eの方がよさそうです。
なお、上の例はWindows 10にインストールしたcygwinでの実行例なので他の環境のものとは違っているでしょうが、gccをお使いならどの環境でも同様の手順で調べられるのではないかと思います。
gcc/g++以外だとわかりませんが、それなりのオプションがあるような気がするのでmanやリファレンスなどを頼りに調べてみてはいかがでしょう?