#include标题样式

tri*_*ker 8 c++

在包含标题时,我有一个关于"最佳实践"的问题.

显然包含防护保护我们不要在头文件或源文件中包含多个包含,所以我的问题是你是否觉得#include包含头文件或源文件中所有必需的头文件是有益的,即使其中一个头部已包含一个其他包括.这样做的原因是读者可以看到文件所需的一切,而不是寻找其他标题.

例如:假设使用了防护装置:

// Header titled foo.h
#include "blah.h"
//....
Run Code Online (Sandbox Code Playgroud)

.

// Header titled bar.h that needs blah.h and foo.h
#include "foo.h"
#include "blah.h" // Unnecessary, but tells reader that bar needs blah
Run Code Online (Sandbox Code Playgroud)

此外,如果头文件中不需要标题,但是在相关的源文件中需要标题,是否将它放在标题或源文件中?

Bet*_*eta 10

在你的例子中,是的,bar.h应该#include blah.h. 这样一来,如果有人修改了foo以便它不需要等等,那么改变就不会破坏吧.

如果在foo.c中需要blah.h但在foo.h中不需要,那么它在foo.h中不应该是#included.许多其他文件可能#include foo.h,更多文件可能#include 它们.如果你在foo.h中#include blah.h,那么你就会使所有这些文件不必要地依赖于blah.h. 不必要的依赖会引起很多麻烦:

  • 如果修改blah.h,则必须重新编译所有这些文件.
  • 如果你想隔离其中一个(比如,把它带到另一个项目或围绕它建立一个单元测试),你必须采取blah.h.
  • 如果有在其中的一个错误,你不能排除blah.h作为,直到你事业的检查.
  • 如果你愚蠢的话,在blah.h中有一个像宏的东西......好吧,没关系,在这种情况下,你没有希望.