“然后在报价目录中”是什么意思?

时间:2020-04-03 15:07:07

标签: c++ c include-path

The C Preprocessor version 10.0.1的第8页中,我们有以下语句:

#include "file"

此变体用于您自己的头文件 程序。它首先在目录中搜索名为file的文件 包含当前文件,然后在报价目录中,然后 与<file>使用的目录相同。您可以将目录放在 带有‘-iquote’选项的报价目录列表。

“然后在报价目录中”是什么意思?

4 个答案:

答案 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选项就足够了。 (因此不需要“报价目录”的标准术语。)