为了账号安全,请及时绑定邮箱和手机立即绑定

#include <filename>和#include“filename”有什么区别?

#include <filename>和#include“filename”有什么区别?

眼眸繁星 2019-05-25 15:36:50
#include <filename>和#include“filename”有什么区别?在C和C ++编程语言中,使用尖括号和在include语句中使用引号有什么区别,如下所示?#include <filename>#include "filename"
查看完整描述

4 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

实际上,差异在于预处理器搜索包含文件的位置。

对于#include <filename>预处理器以依赖于实现的方式搜索,通常在编译器/ IDE预先指定的搜索目录中。此方法通常用于包括标准库头文件。

对于#include "filename"预处理器首先在与包含该指令的文件相同的目录中进行搜索,然后按照用于#include <filename>表单的搜索路径进行搜索。此方法通常用于包括程序员定义的头文件。

有关搜索路径的GCC 文档中提供了更完整的描述。


查看完整回答
反对 回复 2019-05-25
?
桃花长相依

TA贡献1860条经验 获得超8个赞

唯一的方法是阅读您的实现文档。

C标准中,第6.10.2节第2至4段规定:

  • 表单的预处理指令

    #include <h-char-sequence> new-line

    搜索的用于实现定义的地方的序列报头由之间的指定序列唯一地识别<>分隔符,并且使得由所述的全部内容替换该指令的标头。如何指定场所或标识的头是实现定义的。

  • 表单的预处理指令

    #include "q-char-sequence" new-line

    导致由分隔符之间的指定序列标识的源文件的全部内容替换该指令"。以实现定义的方式搜索指定的源文件。如果不支持此搜索,或者搜索失败,则会重新处理该指令,就像它读取一样

    #include <h-char-sequence> new-line

    使用>原始指令中相同的包含序列(包括字符,如果有的话)。

  • 表单的预处理指令

    #include pp-tokens new-line

    (允许与前两种形式中的一种不匹配)。include指令中的预处理标记处理与正常文本一样。(当前定义为宏名称的每个标识符将替换为其预处理标记的替换列表。)所有替换后生成的指令应与前两个表单中的一个匹配。将a <>预处理令牌对或一对"字符之间的一系列预处理标记组合成单个标题名称预处理标记的方法是实现定义的。

定义:

  • h-char:源字符集的任何成员,除了换行符和 >

  • q-char:源字符集的任何成员,除了换行符和 "


查看完整回答
反对 回复 2019-05-25
?
HUH函数

TA贡献1836条经验 获得超4个赞

<和>之间的字符序列唯一地引用标题,该标题不一定是文件。实现几乎可以随意使用字符序列。(但是,大多数情况下,只需将其视为文件名并在包含路径中进行搜索,就像其他帖子所述。)

如果使用该#include "file"表单,则实现首先查找给定名称的文件(如果支持)。如果不是(支持),或者搜索失败,则实现的行为就像使用了other(#include <file>)形式一样。

此外,存在第三种形式,当#include指令与上述任何一种形式都不匹配时使用。在这种形式中,一些基本的预处理(例如宏扩展)在#include指令的“操作数”上完成,并且结果预期与其他两种形式中的一种匹配。


查看完整回答
反对 回复 2019-05-25
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

这里的一些好的答案引用了C标准,但忘记了POSIX标准,特别是c99(例如C编译器)命令的特定行为。

根据The Open Group Base Specifications Issue 7

-I 目录

在查找常用位置之前,更改搜索名称不是绝对路径名的标头的算法,以查找目录路径名所指定的目录。因此,名称以双引号(“”)括起来的标题应首先在#include行的文件目录中搜索,然后在-I选项中命名的目录中搜索,最后在通常的位置搜索。对于名称用尖括号(“<>”)括起来的标题,只能在-I选项中指定的目录中搜索标题,然后在通常的位置搜索标题。在-I选项中命名的目录应按指定的顺序进行搜索。c99命令调用。

因此,在符合POSIX标准的环境中,使用符合POSIX标准的C编译器,#include "file.h"可能会首先搜索./file.h,其中.是带有#include语句的文件所在的目录,同时#include <file.h>,可能/usr/include/file.h首先搜索,/usr/include系统定义在哪里通常的标题位置(似乎没有POSIX定义)。


查看完整回答
反对 回复 2019-05-25
  • 4 回答
  • 0 关注
  • 1056 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信