当我编写我的程序时,我包含了像#include <iostream>
. 但也是#include "iostream"
正确的,代码编译时不会出现任何错误或问题。
所以,我想知道< >
和之间有什么区别" "
?
当我编写我的程序时,我包含了像#include <iostream>
. 但也是#include "iostream"
正确的,代码编译时不会出现任何错误或问题。
所以,我想知道< >
和之间有什么区别" "
?
双引号 include 用于告诉编译器先在本地目录中查找包含的头文件,然后再在包含目录中搜索。当您尝试包含代码的本地头文件时,您会看到这种差异。如果您使用 '<>' 包含本地头文件,编译器将失败,除非您的本地目录是 'include' 目录路径。
当您使用< >
时,编译器仅在系统指定的目录/目录(例如,您在include
环境变量中设置的任何目录)中查找标头。
当你使用" "
时,编译器首先在本地目录中查找,如果失败,就像你使用的那样重新搜索< >
。从技术上讲,(即,根据标准)不一定是“本地”目录,但这就是它在我所知道的每个编译器中的工作方式)。
如果您关心,标准中的官方措辞实际上有点模糊(§16.2/2-3):
形式的预处理指令
# include <h-char-sequence> new-line
在一系列实现定义的位置中搜索由 < 和 > 分隔符之间的指定序列唯一标识的标头,并用标头的全部内容替换该指令。如何指定位置或标识的标头是实现定义的。
形式的预处理指令
# include "q-char-sequence" new-line
导致将该指令替换为由 " 分隔符之间的指定序列标识的源文件的全部内容。以实现定义的方式搜索命名的源文件。如果不支持此搜索,或者搜索失败, 该指令被重新处理,就好像它读取
# include <h-char-sequence> new-line
具有与原始指令相同的包含序列(包括 > 字符,如果有的话)。
<> 只在编译器提供的头文件中查找,而 "" 首先在项目目录中查找,如果没有,则只在编译器提供的头文件中查找。
在源文件旁边添加一个名为 iostream 的文件。现在包含 "" 并观察它失败(因为它将获得空文件)或使用 <> 并观察它成功(因为它将忽略本地文件)。
“XXX” - 它在您的一个目录中。- 它在 Microsoft 的 SDK 或任何 SDK 中(您可以在