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

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


当前回答

编译器生成的实现定义的警告可以(并且将)以不同于程序库的方式对待系统库。

So

#包含<myFilename>

--它实际上声明myFilename位于系统库位置——很可能(而且可能会)隐藏死代码和未使用的变量警告等,当您使用:

#包括“myFilename”

其他回答

一般来说,区别在于预处理器搜索头文件的位置:

#include是包含头文件的预处理器指令。两个#include都用于在程序中添加或包含头文件,但首先是包含系统头文件,然后是用户定义的头文件。

#include<filename>用于在程序中包含系统库头文件,意味着C/C++预处理器将搜索存储C库文件或预定义系统头文件的文件名。#include“filename”用于在程序中包含用户定义的头文件,这意味着C/C++预处理器将在程序所在的当前目录中搜索文件名,然后遵循#include<filename>所使用的搜索路径

检查gcc-docs-gcc-include文件

#包括<文件名>

预处理器以依赖于实现的方式进行搜索。它告诉编译器搜索系统头文件所在的目录。此方法通常用于查找标准头文件。

#包括“文件名”

这告诉编译器在程序运行的地方搜索头文件。如果失败,它的行为类似于#include<filename>,并在存储系统头文件的位置搜索该头文件。此方法通常用于标识用户定义的头文件(由用户创建的头文件)。如果您想调用标准库,请不要使用它,因为它比#include<filename>需要更多的编译时间。

表格1-#include<xxx>

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

表格2-#包括“xxx”

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


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

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


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

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

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

#include <iostream>

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

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

#include "myfile.h"

预处理器的确切行为因编译器而异。以下答案适用于GCC和其他几个编译器。

#include<file.h>告诉编译器在其“include”目录中搜索头文件,例如,对于MinGW,编译器将在C:\MinGW\include\或安装编译器的任何位置搜索file.h。

#include“file”告诉编译器在当前目录(即源文件所在的目录)中搜索文件。

您可以使用GCC的-I标志告诉它,当它遇到带有尖括号的include时,它还应该在-I之后的目录中搜索标头。GCC将把标志后面的目录当作includes目录。

例如,如果您在自己的目录中有一个名为myheader.h的文件,那么如果您使用标志-I调用GCC,可以说#include<myheader.h>。(表示应搜索当前目录中的includes。)

如果没有-I标志,则必须使用#include“myheader.h”来包含文件,或将myheader.h移动到编译器的include目录。