我是否在我的cpp文件或包含的头文件中放入#include指令是否重要?

时间:2011-02-07 21:00:01

标签: c++ include

我的c ++程序使用单独的头文件(我们称之为myHeader.h),因此包含它(#include "myHeader.h")。在我的程序中,我需要使用另一个头文件(让我们称之为another.h)。我将#include "another.h"指令放在cpp文件中还是放在myHeader.h中会有所不同吗?

6 个答案:

答案 0 :(得分:14)

如果.h文件中没有使用它,那么编译成功/失败就没有区别。

但是,建议在.cpp文件的实现中放置仅包含头文件的包含,原因如下:

  • 出于封装原因 - 没有人需要知道您仅为实施所包含的内容。
  • 在标题文件A.h中加入文件B.h也会使包含B.h的任何文件包含A.h。这可能会在看似无关的文件之间造成严重的依赖性问题。
  • 由于上述原因,它还可以大大增加构建时间(包含的每个文件都会复制到编译单元中)。

答案 1 :(得分:7)

如果您只需要在cpp文件中包含标题,则应将其包含在cpp文件中。

如果将其包含在标题中,则会为包含标题的所有其他人添加不需要的依赖项。如果您包含的不需要的标头还包含其他不需要的标头,则可能会爆炸。

答案 2 :(得分:5)

你的问题的答案是“不”。但是,您应该尽量避免在.h文件中生成不必要的include语句,因为这会导致更长的构建时间。它也适用于封装原因。

答案 3 :(得分:1)

假设你所有的包括守卫等等,那么没有。

最好考虑用户如何使用代码并尝试避免意外。

一般情况下,您应该避免使用包含在其他包含文件中的包含文件的复杂树 - 尽管现代编译器上的预编译头文件有帮助。

但是你还应该确保你拥有所有高级声明,以便cpp文件中包含的顺序无关紧要。

答案 4 :(得分:0)

真的没什么区别。头文件和cpp文件都可以包含其他文件。包含的文件有效地复制到文本流中。

答案 5 :(得分:0)

有一点不同 - 每次你的h文件都被包含在内,那个h文件中包含的任何文件都被包含在内 - 我还没有与现代C ++编译器保持同步,但这曾经真正增加了编译时间。

它还增加了源的物理依赖性 - John Lakos'Large Scale C++ Software Design解决了这个问题,非常值得阅读构建c ++程序。它发表于1996年,所以它并非基于现行做法,但对结构的建议值得了解。