在include指令中使用尖括号和引号有什么区别?

#包括<文件名>#包括“文件名”


当前回答

#include<>用于预定义的头文件

如果头文件是预定义的,那么您只需将头文件名写在尖括号中,它看起来像这样(假设我们有一个预定义的头文件名iostream):

#include <iostream>

#include“”表示程序员定义的头文件

如果你(程序员)编写了自己的头文件,那么你会将头文件名用引号括起来。因此,假设您编写了一个名为myfile.h的头文件,那么这是如何使用include指令包含该文件的示例:

#include "myfile.h"

其他回答

#include <file> 

包含默认包含目录所在的文件。

#include "file" 

在编译文件的当前目录中包含文件。双引号还可以指定到其他位置的完整文件路径。

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

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

表单的预处理指令#包含<h-char-sequence>新行在实现定义的位置序列中搜索由<和>分隔符之间的指定序列唯一标识的头,并用头的全部内容替换该指令。如何指定位置或标识标题是实现定义的。表单的预处理指令#包括“q-char-sequence”新行导致用“分隔符”之间的指定序列标识的源文件的全部内容替换该指令。将以实现定义的方式搜索命名的源文件。如果不支持此搜索,或者搜索失败,则会像读取指令一样重新处理该指令#包含<h-char-sequence>新行具有与原始文件相同的包含序列(包括>个字符,如果有)指令。表单的预处理指令#包含pp令牌新行(与前两种形式之一不匹配)。指令中include之后的预处理标记与普通文本中的处理相同。(当前定义为宏名称的每个标识符由其预处理令牌的替换列表替换。)所有替换后产生的指令应与前两种形式之一匹配。实现定义了一种方法,通过该方法,<和>预处理令牌对或一对“字符”之间的一系列预处理令牌组合成单个标头名称预处理令牌。定义:h-char:源字符集的任何成员,除了换行符和>q-char:源字符集的任何成员,除了换行符和“

#include<>用于预定义的头文件

如果头文件是预定义的,那么您只需将头文件名写在尖括号中,它看起来像这样(假设我们有一个预定义的头文件名iostream):

#include <iostream>

#include“”表示程序员定义的头文件

如果你(程序员)编写了自己的头文件,那么你会将头文件名用引号括起来。因此,假设您编写了一个名为myfile.h的头文件,那么这是如何使用include指令包含该文件的示例:

#include "myfile.h"

表格1-#include<xxx>

首先,在调用指令的当前目录中查找头文件的存在。如果未找到,则在预配置的标准系统目录列表中进行搜索。

表格2-#包括“xxx”

这将查找在调用指令的当前目录中是否存在头文件。


确切的搜索目录列表取决于目标系统、GCC的配置方式以及安装位置。通过使用-v选项运行GCC编译器,可以找到GCC编译器的搜索目录列表。

您可以使用-Idir将其他目录添加到搜索路径中,这会导致在当前目录之后(对于指令的引号形式)和标准系统目录之前搜索dir。


基本上,表单“xxx”只是在当前目录中搜索;如果未找到,则返回表单

这里的许多答案都集中在编译器搜索文件的路径上。虽然这是大多数编译器所做的,但一个符合标准的编译器可以使用标准头的效果进行预编程,并将#include<list>视为一个开关,它根本不需要作为一个文件存在。

这不是纯粹的假设。至少有一个编译器可以这样工作。建议仅对标准标头使用#include<xxx>。