有没有办法检查C ++搜索包含的所有位置?我想了解为什么有些包含被发现而有些则没有。
编辑:平台是Linux,g ++
答案 0 :(得分:3)
这是依赖于编译器的:您在尖括号中传递标题的位置,并且双引号中的标题应位于以当前文件的位置为根的路径上;编译器还允许您为这些文件指定其他位置。
例如,gcc
有两个选项 - -I
和-i
,用于指定指定为<header.h>
和"header.h"
的标头的位置。如果未指定-I
,则为
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
按照the gcc
documentation中的规定搜索。
答案 1 :(得分:0)
16.2 [cpp.include]为C ++定义了这个; C中的语言几乎相同。
#include <header.h>
在一组实现定义的位置搜索具有该名称的“标题”。这个“标题”不一定是文件;它可能是编译器神奇地知道的东西。
#include "header.h"
还会搜索一组实现定义的位置,但它会查找名为“header.h”的文件。如果该搜索失败,则将该指令视为#include <header.h>
。
许多编译器通过查看“当前目录”来实现第二次搜索,对于某些编译器来说,这意味着启动编译器的目录,而对于其他编译器则意味着包含#include
指令的文件所在的目录位于。
一般情况下,您应该为我们提供引用的表格;尖括号,因为它们不需要文件,应留给实现使用。不是说使用自己的标题的尖括号不起作用,但它是反主题的。