#include<;文件名>;和“包括”;文件名;? 在C和C++编程语言中,使用角括号和使用引用在中的区别包括< /COL>语句,如下: #包括 #包括“文件名”

#include<;文件名>;和“包括”;文件名;? 在C和C++编程语言中,使用角括号和使用引用在中的区别包括< /COL>语句,如下: #包括 #包括“文件名”,c++,c,include,header-files,c-preprocessor,C++,C,Include,Header Files,C Preprocessor,实际上,不同之处在于预处理器搜索包含文件的位置 对于#include,预处理器以依赖于实现的方式进行搜索,通常在编译器/IDE预先指定的搜索目录中进行搜索。此方法通常用于包括标准库头文件 对于#include“filename”,预处理器首先在与包含指令的文件相同的目录中搜索,然后按照#include表单使用的搜索路径进行搜索。此方法通常用于包含程序员定义的头文件 GCC中提供了更完整的描述。包含告诉预处理器先在-I目录和预定义目录中搜索,然后在.c文件的目录中搜索。“file”include告

实际上,不同之处在于预处理器搜索包含文件的位置

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

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

GCC中提供了更完整的描述。

包含告诉预处理器先在
-I
目录和预定义目录中搜索,然后在.c文件的目录中搜索。
“file”
include告诉预处理器首先搜索源文件的目录,然后返回到
-I
并预定义。所有目的地都会被搜索,只是搜索顺序不同

2011年标准主要讨论“16.2源文件包含”中的包含文件

2表单的预处理指令

#include <h-char-sequence> new-line
#include "q-char-sequence" new-line
#include pp-tokens new-line
#include <h-char-sequence> new-line
#include "q-char-sequence" new-line
#include pp-tokens new-line
#包括新行

在实现定义的位置序列中搜索由 指定<和>分隔符之间的顺序,并导致 用标题的全部内容替换该指令。 如何指定位置或识别标题 实现定义

3表单的预处理指令

#include <h-char-sequence> new-line
#include "q-char-sequence" new-line
#include pp-tokens new-line
#include <h-char-sequence> new-line
#include "q-char-sequence" new-line
#include pp-tokens new-line
#包括“q-char-sequence”新行

导致将该指令替换为由标识的源文件的全部内容 指定的“分隔符”之间的顺序。命名的源文件为 以实现定义的方式搜索。如果此搜索是 不受支持,或者如果搜索失败,该指令将作为 如果它读到

#include <h-char-sequence> new-line
#include <h-char-sequence> new-line
#包括新行

具有与原始指令相同的包含序列(包括>字符,如果有)


请注意,如果找不到文件,则
“xxx”
表单将降级为
表单。其余部分由实现定义。

介于<和>之间的字符序列唯一地引用头,头不一定是文件。实现可以随意使用字符序列。(不过,大多数情况下,只需将其视为文件名,并按照其他帖子的状态在include路径中进行搜索。)

如果使用了
#include“file”
表单,则实现首先查找给定名称的文件(如果支持)。如果不支持(不支持),或者搜索失败,则实现的行为与使用了另一个(
#include
)表单一样


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

唯一知道的方法是阅读实现的文档。”

在第6.10.2节第2至4段中,说明:

  • 表单的预处理指令

    #include <h-char-sequence> new-line
    
    #include "q-char-sequence" new-line
    
    #include pp-tokens new-line
    
    #include <h-char-sequence> new-line
    
    #include "q-char-sequence" new-line
    
    #include pp-tokens new-line
    
    使该指令被
    分隔符。以实现定义的方式搜索命名的源文件。如果不支持此搜索,或者搜索失败,则将重新处理该指令,就像读取指令一样。”

    #include <h-char-sequence> new-line
    
    #include <h-char-sequence> new-line
    
    (与前面两种形式中的一种不匹配)是允许的。指令中
    include
    之后的预处理标记的处理方式与普通文本中的处理方式相同。(当前定义为宏名称的每个标识符由其预处理标记的替换列表替换。)所有替换后产生的指令应与前面两种形式中的一种形式相匹配。
    预处理令牌对或一对
    字符之间的预处理令牌序列组合为单个头名预处理令牌的方法由实现定义

定义:
  • h-char:源字符集的任何成员,新行字符和

  • q-char:源字符集的任何成员,新行字符和

它是:

"mypath/myfile" is short for ./mypath/myfile
是包含
#include
的文件目录,和/或编译器的当前工作目录,和/或
默认包含路径

是/mypath/myfile的缩写
如果
/
中,则没有区别

如果
mypath/myfile
位于另一个include目录中,则行为未定义。

对于
\include“”
编译器通常先搜索包含该include的文件的文件夹,然后搜索其他文件夹。对于
#include
,编译器不会搜索当前文件的文件夹。

带尖括号的#include将搜索“依赖于实现的位置列表”(这是一种非常复杂的说法)要包含的文件的“系统标题”)

带有引号的#include只会搜索