我想以免责声明开始我的问题,我是初学c ++。
我的问题是预处理器在查找头文件时如何知道要查找的目录。
我知道它会搜索某些特定的预定义位置以及我们在g ++编译步骤中作为-I传递的内容。然而令我困惑的是,即使它们不在那些位置,也会拾取一些标准标题。
我在Finding out what the GCC include path is提到了问题,然后我按照那里的步骤进行了操作。
$ /usr/include % echo | cpp -Wp,-v
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/4.9/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "<stdin>"
但我试图找到iostream,我看到了
$ locate iostream
/usr/include/c++/4.8/iostream
它位于/usr/include/c++/4.8/iostream
,但搜索路径以/usr/include
结尾。如果它是任何其他头文件,我将不得不包括它
#include <c++/4.8/iostream>
,但在我使用#include <iostream>
的所有程序中。
PS:我问这个问题的原因是因为我不小心删除了/usr/include/c++/4.9
目录,它在删除之前就已经工作了。但它并没有提升usr/include/c++/4.8/cstddef
。我想了解获取c ++预处理器的正确包含路径的过程。
谢谢
答案 0 :(得分:2)
他们已编入。请确保指定正确的语言。
$ echo | cpp -Wp,-v -x c++
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.9.2/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/x86_64-redhat-linux
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/backward
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/include
/usr/local/include
/usr/include
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "<stdin>"