在 C 和 C ++ 编程语言中,使用尖括号和在include
语句中使用引号有什么区别,如下所示?
#include <filename>
#include "filename"
唯一的方法是阅读您的实现文档。
在C 标准中 ,第 6.10.2 节第 2 至 4 段规定:
表单的预处理指令
#include <h-char-sequence> new-line
搜索一系列实现定义的位置,以查找由
<
和>
分隔符之间的指定序列唯一标识的标头,并使标头的整个内容替换该指令。如何指定位置或标识的标头是实现定义的。表单的预处理指令
#include "q-char-sequence" new-line
导致由
"
delimiters"
之间指定序列标识的源文件的全部内容替换该指令。以实现定义的方式搜索指定的源文件。如果不支持此搜索,或者搜索失败,该指令被重新处理,就像它读取一样#include <h-char-sequence> new-line
使用原始指令中相同的包含序列(包括
>
字符,如果有的话)。表单的预处理指令
#include pp-tokens new-line
(允许与前两种形式中的一种不匹配)。指令中
include
的预处理标记的处理方式与普通文本一样。 (当前定义为宏名称的每个标识符将替换为其预处理标记的替换列表。)所有替换后生成的指令应与前两个表单中的一个匹配。将<
和>
预处理令牌对或一对"
字符"
之间的预处理令牌序列组合成单个头名称预处理令牌的方法是实现定义的。定义:
h-char:除了换行符和
>
之外的源字符集的任何成员q-char:源字符集的任何成员,除了换行符和
"
<和> 之间的字符序列唯一地引用标题,该标题不一定是文件。实现几乎可以随意使用字符序列。 (但是,大多数情况下,只需将其视为文件名并在包含路径中进行搜索,就像其他帖子所述。)
如果使用#include "file"
表单,则实现首先查找给定名称的文件(如果支持)。如果不是(支持),或者搜索失败,则实现的行为就像使用了另一个( #include <file>
)表单一样。
此外,存在第三种形式,当#include
指令与上述任何一种形式都不匹配时使用。在这种形式中,一些基本的预处理(例如宏扩展)是在#include
指令的 “操作数” 上完成的,结果应该与其他两种形式中的一种匹配。