1

有没有办法检查 C++ 搜索包含的所有位置?我想了解为什么找到了一些包含而没有找到其他包含。

编辑:平台是 Linux,g++

4

2 回答 2

3

这取决于编译器:您在尖括号中传递标头的位置,并且双引号中的标头应位于以当前文件位置为根的路径中;编译器还允许您为这些文件指定其他位置。

例如,gcc有两个选项 --I-i用于指定指定为<header.h>和的标题的位置"header.h"。如果-I未指定,则默认位置

 /usr/local/include
 libdir/gcc/target/version/include
 /usr/target/include
 /usr/include

被搜索,如文档中gcc指定。

于 2013-02-17T20:04:25.557 回答
0

16.2 [cpp.include] 为 C++ 定义了这个;C中的语言几乎相同。

#include <header.h>在一组实现定义的位置中搜索具有该名称的“标题”。这个“头文件”不必是文件;它可能是编译器神奇地知道的东西。

#include "header.h"还搜索一组实现定义的位置,但它会查找名为“header.h”的文件。如果该搜索失败,它会将指令视为#include <header.h>.

许多编译器通过查看“当前目录”来实现第二次搜索,对于某些编译器来说,这意味着启动编译器的目录,而对于其他编译器来说,则意味着包含#include指令的文件所在的目录。

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

于 2013-02-17T22:51:57.493 回答