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.
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.
查找标头的位置是实现定义的东西,对于 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
的地方)。