0

When I run the program, I get the message:

error: abc/xyz.h: No such file or directory.

abc resides in the same directory as the C code of the program I am trying to run.

4

1 回答 1

2

查找标头的位置是实现定义的东西,对于 the<>""变体都是如此。

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


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的地方)。

于 2013-01-14T09:08:21.760 回答