C ++搜索的所有地方都包含在哪里?

时间:2013-02-17 19:59:32

标签: c++ include include-path

有没有办法检查C ++搜索包含的所有位置?我想了解为什么有些包含被发现而有些则没有。

编辑:平台是Linux,g ++

2 个答案:

答案 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指令的文件所在的目录位于。

一般情况下,您应该为我们提供引用的表格;尖括号,因为它们不需要文件,应留给实现使用。不是说使用自己的标题的尖括号不起作用,但它是反主题的。