是否有明确的方法可以查看给定#include <example.h>
解析的位置?我的代码中有#include <linux/unistd.h>
,但我不知道正在使用哪个unistd.h
。
答案 0 :(得分:1)
如果使用-E
命令行选项获取预处理器输出,它将告诉您包含的每个头文件的完整路径,包括其他头文件包含的那些。例如:
$ cat test.c
#include <unistd.h>
$ gcc -E test.c
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"
# 1 "/usr/include/unistd.h" 1 3 4
# 71 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/_types.h" 1 3 4
# 27 "/usr/include/_types.h" 3 4
# 1 "/usr/include/sys/_types.h" 1 3 4
# 32 "/usr/include/sys/_types.h" 3 4
# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 33 "/usr/include/sys/_types.h" 2 3 4
# 1 "/usr/include/machine/_types.h" 1 3 4
# 34 "/usr/include/machine/_types.h" 3 4
# 1 "/usr/include/i386/_types.h" 1 3 4
# 37 "/usr/include/i386/_types.h" 3 4
typedef signed char __int8_t;
(lots more output)
所以在这种情况下,正在使用的标题是/usr/include/unistd.h
。
答案 1 :(得分:0)
在普通的Unix系统上,如果不这样做 如果指示它,它会看起来 对于#include请求的标头 在:
/usr/local/include libdir/gcc/target/version/include /usr/target/include /usr/include
在上面,目标是规范的 已配置系统GCC的名称 编译代码;经常但不是 始终与规范名称相同 它运行的系统。版本是 正在使用的GCC版本。
您可以使用以下命令添加到此列表中 -Idir命令行选项。搜索-I命名的所有目录, 从左到右的顺序,在之前 默认目录。唯一的 例外情况是dir已经存在 默认搜索。在这种情况下, 选项被忽略并且搜索顺序 系统目录仍然存在 不变。
因此,除非您添加-I(大眼,非椭圆)切换,否则包含的版本是在第一个保存它的目录中找到的版本。