问头文件搜索的完整规则是什么?
答确切的行为由实现定义(这意味着应该被记录;请参阅问题 11.33)。通常,用<>语法命名的头文件将在一个或多个标准位置搜索。[脚注]用""语法命名的头文件首先在“当前目录”中搜索,然后(如果未找到)在相同标准位置搜索。(最后一个规则,即""文件还被搜索,就好像它们是<>文件一样,是标准规定的唯一规则。)
另一个区别是“当前目录”的定义,对于""文件。传统上(尤其是在 Unix 编译器下),当前目录被认为是包含该文件的目录,该文件包含#include指令。然而,在其他编译器下,当前目录是编译器最初被调用的目录。(当然,在没有目录的系统或没有当前目录概念的系统上运行的编译器可能会使用不同的规则。)
通常还有一种方法(通常是一个涉及大写 I 的命令行选项,或者可能是一个环境变量)可以将其他目录添加到搜索标准位置列表中。请查阅您的编译器文档。
额外链接
Dennis Ritchie 的进一步阐述
一篇我 长文 探讨了搜索规则的一些更细微的含义
参考文献:K&R2 Sec. A12.4 p. 231
ISO Sec. 6.8.2
H&S Sec. 3.4 p. 55