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

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


当前回答

它确实:

"mypath/myfile" is short for ./mypath/myfile

具有是#include所在文件的目录和/或编译器的当前工作目录,和/或default_include_path

and

<mypath/myfile> is short for <defaultincludepaths>/mypath/myfile

如果./在<default_include_paths>中,则不会有任何区别。

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

其他回答

不同的是预处理器搜索要包含的文件的位置。

#include<filename>预处理器以实现定义的方式进行搜索,通常在编译器/IDE预先指定的目录中进行搜索。此方法通常用于包含C标准库的头文件和与目标平台相关联的其他头文件。#include“filename”预处理器也以实现定义的方式进行搜索,但通常用于包括程序员定义的头文件,并且通常包括与包含指令的文件相同的目录(除非给出了绝对路径)。

对于GCC,可以在GCC文档中找到关于搜索路径的更完整描述。

在引用系统文件时使用#include<filename>。这是一个头文件,可以在系统默认位置(如/usr/include或/usr/local/include)找到。对于需要包含在其他程序中的自己的文件,必须使用#include“filename”语法。

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

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

#include <iostream>

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

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

#include "myfile.h"

简单的通用规则是使用尖括号来包含编译器附带的头文件。使用双引号包含任何其他头文件。大多数编译器都是这样做的。

1.9-头文件更详细地解释了预处理器指令。如果你是一个新手程序员,那么这个页面应该可以帮助你理解所有这些。我从这里学到了这一点,我一直在工作中遵循这一点。

预处理器的确切行为因编译器而异。以下答案适用于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目录。