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.
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)
小智 5
在预处理期间,所有预处理器指令都将替换为实际值。像宏扩展,代码注释去除,包括头文件源代码等...
我们可以使用cpp-C PreProcessor 命令来检查它。
例如在命令行中:
cpp Filename.c
Run Code Online (Sandbox Code Playgroud)
显示预处理的输出。