使用“”或<>包含提升头文件

时间:2009-12-10 18:17:25

标签: c++ compiler-construction coding-style c-preprocessor conventions

为什么tuple documentation说要使用,例如:

#include "boost/tuple/tuple.hpp"

而不是

#include <boost/tuple/tuple.hpp>

我知道我的代码不太可能有一个名为“boost / tuple / tuple.hpp”的文件, 但使用include&lt;&gt;显然不要查看curent目录。

那是什么原因?

6 个答案:

答案 0 :(得分:7)

使用&lt;&gt;并不意味着“不要查看当前目录” - 这意味着查看实现定义的位置,然后查看其他地方,也实现定义。这两者中的任何一个或两者都不是当前目录。这是C ++标准中比较无用的部分之一。

答案 1 :(得分:5)

<somefile>的历史意义是查看系统标准位置。使用"somefile"表示查看当前目录以及其他一些地方。

答案 2 :(得分:4)

Afaik的原因是区分属于应用程序的标头和来自外部库的标头。我不能说为什么他们没有使用这个惯例。这只是一个惯例,而不是一个规则。

也许有人应该向Boost维护者提出这个问题?

答案 3 :(得分:3)

使用&lt; ...&gt;为了提升。这不是你的代码。除非你的代码得到提升。

使用“....”作为头文件,这在每个C ++程序中都不可避免。这适用于读者,而不适用于编译器。

答案 4 :(得分:0)

来自msdn

  

引用表格

     

此表单指示预处理器   在同一个中查找包含文件   包含的文件的目录   #include语句,然后在   任何文件的目录   包含(#include)该文件。该   预处理器然后搜索   / I编译器指定的路径   选项,然后沿着指定的路径   INCLUDE环境变量。

     

角括号表格

     

此表单指示预处理器   首先搜索包含文件   沿着/ I指定的路径   编译选项,然后,编译时   从命令行,沿着路径   由INCLUDE环境指定   变量

答案 5 :(得分:0)

您是在问这两种包容方式之间的差异,还是Boost的基本原理?由于其他人已就这种差异发表过意见,我将在后一个问题上加以补充:

总的来说,我认为两者都不正确。这取决于您的项目在其依赖关系方面的结构。例如,在我的项目中,我通常在项目的子目录中包含Boost等的相关位,因此倾向于选择#include ""形式。如果您想从更全球的位置选择Boost安装,您更喜欢#include <>表单。