如何在Linux中找到C编程语言的头文件?

Yis*_*ang 52 c linux gcc header-files

当我在Linux中编写C程序,然后使用gcc编译它们时,我总是很好奇这些头文件的位置.例如,在哪里stdio.h.更一般地说,在哪里stdbool.h

我想知道的不仅仅是它的位置,还有如何获取这些地方,例如,使用shell命令或使用C编程语言.

zwo*_*wol 62

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
Run Code Online (Sandbox Code Playgroud)

每行开头的点数计算嵌套的深度#include.

  • 关于这些点的更多信息...这些被称为传递依赖性——这个术语借用自数学,用于描述隐喻链上事物的关系:a 与 b 相关,b 与 c 相关,因此 a 与 c 相关,依此类推。将*a* 替换为您的程序,将*relates* 替换为“includes”。 (2认同)

asc*_*ler 28

如果您使用gcc,则可以使用以下内容检查特定文件:

echo '#include <stdbool.h>' | cpp -H -o /dev/null 2>&1 | head -n1
Run Code Online (Sandbox Code Playgroud)

-H要求预处理器以递归方式打印所有包含的文件. head -n1从中获取第一行输出,忽略命名头中包含的任何文件(尽管stdbool.h特别可能没有).

例如,在我的计算机上,输出如下:

. /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h
Run Code Online (Sandbox Code Playgroud)


guz*_*guz 22

locate stdio.h
Run Code Online (Sandbox Code Playgroud)

要么

mlocate stdio.h
Run Code Online (Sandbox Code Playgroud)

locate如果你从未更新它,它依赖于数据库

sudo updatedb
Run Code Online (Sandbox Code Playgroud)

您还可以查询自己gcc扫描的默认目录gcc:

gcc -print-search-dirs
Run Code Online (Sandbox Code Playgroud)

  • 当然你的意思是`updatedb`而不是`locate update`? (3认同)
  • `gcc -print-search-dirs`仅打印程序和库位置.它不打印标题搜索路径. (3认同)

小智 5

在预处理期间,所有预处理器指令都将替换为实际值。像宏扩展,代码注释去除,包括头文件源代码等...

我们可以使用cpp-C PreProcessor 命令来检查它。

例如在命令行中:

cpp Filename.c
Run Code Online (Sandbox Code Playgroud)

显示预处理的输出。