0

可能重复:
#include <文件名> 和#include “文件名”有什么区别?

当我编写我的程序时,我包含了像#include <iostream>. 但也是#include "iostream"正确的,代码编译时不会出现任何错误或问题。

所以,我想知道< >和之间有什么区别" "

4

4 回答 4

1

双引号 include 用于告诉编译器先在本地目录中查找包含的头文件,然后再在包含目录中搜索。当您尝试包含代码的本地头文件时,您会看到这种差异。如果您使用 '<>' 包含本地头文件,编译器将失败,除非您的本地目录是 'include' 目录路径。

于 2012-04-24T19:34:30.397 回答
1

当您使用< >时,编译器在系统指定的目录/目录(例如,您在include环境变量中设置的任何目录)中查找标头。

当你使用" "时,编译器首先在本地目录中查找,如果失败,就像你使用的那样重新搜索< >。从技术上讲,(即,根据标准)不一定是“本地”目录,但这就是它在我所知道的每个编译器中的工作方式)。

如果您关心,标准中的官方措辞实际上有点模糊(§16.2/2-3):

形式的预处理指令

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

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

形式的预处理指令

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

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

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

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

于 2012-04-24T19:35:10.917 回答
0

<> 只在编译器提供的头文件中查找,而 "" 首先在项目目录中查找,如果没有,则只在编译器提供的头文件中查找。

在源文件旁边添加一个名为 iostream 的文件。现在包含 "" 并观察它失败(因为它将获得空文件)或使用 <> 并观察它成功(因为它将忽略本地文件)。

于 2012-04-24T19:34:21.083 回答
0

“XXX” - 它在您的一个目录中。- 它在 Microsoft 的 SDK 或任何 SDK 中(您可以在

于 2012-04-24T19:36:11.680 回答