在The C Preprocessor version 10.0.1的第8页中,我们有以下语句:
#include "file"
此变体用于您自己的头文件 程序。它首先在目录中搜索名为
file
的文件 包含当前文件,然后在报价目录中,然后 与<file>
使用的目录相同。您可以将目录放在 带有‘-iquote’
选项的报价目录列表。
“然后在报价目录中”是什么意思?
答案 0 :(得分:3)
文档说:
您可以使用“ -iquote”选项将目录放在报价目录列表的前面。
因此,“引用目录”是使用“ -iquote”选项 1 作为参数传递的那些目录。该选项的文档说:
-iquote目录
仅在目录“ dir”中搜索用“ #include”文件“”请求的头文件;首先,不搜索“ #include <文件>” -I在标准系统之前指定的目录 目录。如果dir以“ =”开头,则“ =”将替换为 sysroot前缀;请参阅--sysroot和-isysroot。
1 从理论上讲,它来自其他来源。我不知道其他有关报价目录的文献资料。似乎没有默认列表记录在案。我认为默认情况下该列表为空。
答案 1 :(得分:2)
gcc接受几种描述包含目录的命令行参数:
-I
-以#include <file>
格式搜索,如果其他方法失败则以#include "file"
格式搜索
-iquote
-仅在#include "file"
格式的情况下搜索,如果在目录中找不到文件以及包含文件。它定义了这些“引用目录”。
答案 2 :(得分:0)
C标准这样说:
6.10.2包含源文件
的预处理指令
约束
#include
指令应标识可以由实现处理的头文件或源文件。
语义学
格式为# include <h-char-sequence> new-line
在实现定义的位置序列中搜索由
的预处理指令<
和>
分隔符之间的指定序列唯一标识的标头,并用该标头的整个内容替换该指令。如何指定位置或标识标题是实现定义的。
格式为# include "q-char-sequence" new-line
导致该指令被
"
分隔符之间指定序列标识的源文件的全部内容替换。以实现定义的方式搜索命名的源文件。如果不支持此搜索,或者搜索失败,则伪指令将重新处理,就像读# include <h-char-sequence> new-line
具有与原始指令相同的包含序列(包括
>
字符,如果有的话)。
最后,报价目录是在实现标准包含路径的目录之前,以实现定义的方式进行搜索的目录。
答案 3 :(得分:0)
根据我的经验,“引用目录”不是一个标准术语。而是,这似乎是通过#include
的引号形式而不是尖括号括起来的目录的临时描述。它可能源自用于指定可以找到标题的目录的命令行选项(在链接文档的第63-64页中找到)。
-I dir
认为“包含目录”;将dir
添加到针对所有#include
指令搜索的目录列表中。-isystem dir
认为“系统包含目录”; dir
被添加到带有系统标题的目录列表的前面。 (这些标头传统上使用#include
的尖括号形式,但这不是必需的。)由于系统标头的目录是用#include
的两种形式搜索的,此选项在-I
上是多余的(或者也许-I
在此看来是多余的)。-iquote dir
认为“引用包含目录”; dir
被添加到(最初为空)目录列表中,以搜索用引号形式为#include
指定的标头。 (这些标头传统上是是您编写的标头,但这不是强制性的。)不会在这些目录中搜索尖括号版本。因此,“引用目录”是标题可以在#include
引用形式中存在的目录,而在尖括号中则不能存在。通常,不需要这种精确度,并且-I
选项就足够了。 (因此不需要“报价目录”的标准术语。)