如果一个程序有#include <abc xyz.h =“”>,abc所在的目录在哪里?</abc>

时间:2013-01-14 08:59:46

标签: include-path

当我运行程序时,我收到消息:

错误:abc / xyz.h:没有这样的文件或目录。

abc与我正在尝试运行的程序的C代码位于同一目录中。

1 个答案:

答案 0 :(得分:2)

查找标头的位置是实现定义的内容,适用于<>""变体。

因此,这取决于您正在使用的实际实现。


C99的相关位来自6.10.2,“源文件包含”(C11中未更改),引用如下。

表单

的预处理指令
# include <h-char-sequence> new-line

在一系列实现定义的位置中搜索由<>分隔符之间的指定序列唯一标识的标头,并导致该标头的整个内容替换该指令。如何指定场所或标识的标题是实现定义的。

表单

的预处理指令
# include "q-char-sequence" new-line

导致由"分隔符之间的指定序列标识的源文件的全部内容替换该伪指令。以实现定义的方式搜索指定的源文件。如果不支持此搜索,或者搜索失败,则会重新处理该指令,就好像它已读取

一样
# include <h-char-sequence> new-line

使用原始指令中相同的包含序列(包括>字符,如果有的话)。


许多实现会在当前目录中搜索包含文件,因此,如果您的文件实际上是<current-directory>/abc/include/libsomething/xyz.h,则可以使用:

#include "abc/include/libsomething/xyz.h"

或者,您可以将编译器配置为修改搜索路径,例如使用gcc -Iabc/include/libsomething并使用:

#include "xyz.h"

就个人而言,我更喜欢完整的规范,因为它使冲突不太可能(你可能在包含文件搜索路径上的其他地方有不同的 xyz.h。)