【发布时间】:2020-04-22 10:05:17
【问题描述】:
我在 linux 上输入了“cpp -v”,结果如下:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/7/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
所以我按照 CPP 的顺序搜索了 stdio.h,我首先在“/usr/include/x86_64-linux-gnu”找到了它。 具体来说,它的完整路径是“/usr/include/x86_64-linux-gnu/bits/stdio.h”
但是当我打开文件时,它在 21-23 行明确说明:
#ifndef _STDIO_H
# error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
#endif
所以,理论上当我输入我的 C 源代码时:
#include <stdio.h>
预处理器在“/usr/include/x86_64-linux-gnu/bits/stdio.h”找到它,并包含它。 这怎么可能?是否存在使 CPP 忽略“./bits/stdio.h”的机制?还是我的理论错了?
//我在Ubuntu 18上工作,我也安装了clang(不知道是否重要)
【问题讨论】:
-
/usr/include/x86_64-linux-gnu/bits/不在搜索路径列表中。要包含该文件,需要执行#include <bits/stdio.h> -
您可以通过查看here找到包含的实际标头
-
您可以使用
gcc -H …查看编译中实际包含的标头。
标签: c linux gcc include-path