当我运行程序时,我收到消息:
错误:abc / xyz.h:没有这样的文件或目录。
abc与我正在尝试运行的程序的C代码位于同一目录中。
答案 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
。)