【问题标题】:include "file.h" vs <file> what is the difference?include "file.h" 与 <file> 有什么区别?
【发布时间】:2011-11-16 23:14:11
【问题描述】:

我在 Visual Studio 2010 中工作。我在项目属性 -> 链接器 -> 常规 -> 附加目录中添加了一个目录

如果我使用,项目将编译

 "file.h"

但如果我使用则不会

 <file>

【问题讨论】:

  • 因为file.hfile 的名称不同?
  • 如果#include "filename" 找不到指定文件,它会隐式更改为#include &lt;filename&gt; 并使用(可能)不同的搜索选项重试

标签: c++ c visual-studio-2010 include


【解决方案1】:

您可能假设&lt; &gt; 隐式添加.h 到文件名的末尾。这不是真的。无论您使用&lt; &gt; 还是" ",对文件名都没有意义。它基本上告诉实现它应该以什么顺序遍历包含目录以查找头文件。

引用标准:

形式为
# include &lt;h-char-sequence&gt; new-line
的预处理指令 在一系列实现定义的位置中搜索由&lt;&gt; 分隔符之间的指定序列唯一标识的标头,并用标头的全部内容替换该指令。如何指定位置或标识标头是实现定义的。

形式为
# include "q-char-sequence" new-line
的预处理指令 导致将该指令替换为由" 分隔符之间的指定序列标识的源文件的全部内容。以实现定义的方式搜索命名的源文件。如果不支持此搜索,或者搜索失败,则重新处理该指令,就像它已读取一样

# include &lt;h-char-sequence&gt; new-line
与原始指令中包含的相同序列(包括&gt; 字符,如果有的话)

【讨论】:

  • "…告诉 预处理器" :-P
  • @sidyll 技术上正确的术语是“实现”。该标准没有规定预处理是否应由单独的程序完成。
  • 要完成这个答案,最好解释一下 可能不是同一个文件,并且编译器提供的标准库文件没有扩展名。这样,您就可以与需要在包含路径中的其他文件有所不同。
  • @Klaim 确实。为了进一步澄清,C 标准库头文件都有 .h 扩展名,而 C++ 没有任何扩展名。
  • @Klaim:我们甚至有一个例子:&lt;string&gt; 是 C++ 字符串相关的东西(basic_string & co.),而 &lt;string.h&gt; 是 C 字符串处理函数的遗留标头.
【解决方案2】:

"" 用于本地文件, 来自 C 库中的文件。

【讨论】:

  • 几乎正确 - "" 还将包括库文件。但这仍然是一个很好的一般规则。
【解决方案3】:

仅当存在这样的文件时,包含才有效。在您的情况下,这可能是因为有一个文件 file.h 但只需注意 file

您可能认为它应该在任何地方都可以使用,就像您在 iostream.hiostream 中看到的那样。 This is because they are two different files which mean two different things.

【讨论】:

    猜你喜欢
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    相关资源
    最近更新 更多