将所有包含放在一个头文件中是一个好主意吗?

时间:2011-02-28 04:42:17

标签: c header-files

C放入C头文件的最佳做法是什么?

将多个源文件中用于程序的所有包含放在一个头文件中是否有用?

实际上每个文件(即stdio.h)中使用的包含怎么样?

7 个答案:

答案 0 :(得分:12)

没有。它只是增加了残余和开销。

作为维护者,您将面临的最大痛苦之一是弄清楚的标题需要被包含在内并摆脱它们。当你看到20多个标题的列表时,你可以开始contemplating ugly things像强制通过它一样(一次删除一个并查看是否有任何中断)。

善待未来必须维护你的东西的人。使用每个模块所需的标题,不多也不少......)

答案 1 :(得分:3)

我个人订阅了“把它放在你使用它的地方”的理念。它使得哪些文件使用什么,依赖关系等等更清晰。

想象一下,你有一个标题MyHeader.h。如果您在其中进行了需要更改依赖于它的代码的更改,则如果使用它的每个文件都具有#include "MyHeader.h",则很容易找到相关代码 - 您只需对include语句进行全局搜索。 / p>

如果另一方面,您只在其他标题MyHeader.h中包含MyHugeHeader.h,然后在文件中包含 ,则无法执行相同操作使用MyHeader.h的文件中的#include "MyHugeHeader.h"为{{1}},与其他文件相同。

答案 2 :(得分:3)

将所有可能的标头放在一个应用程序标头中就像错误一样错误。

这是懒惰,价格很高。它使构建变得脆弱。它使得很难理解真正的依赖关系在哪里,因此难以重构或重用代码。

这使得测试变得困难。

但最大的问题是,它代表了智力上的懒惰,并鼓励更多相同的事情。

与所有编程问题一样,做所需要的,不多也不少。想想维护。考虑构建管理。

只是想一想。

答案 3 :(得分:2)

有些事情尚未指出:

  • 不需要的依赖项会增加编译时间。修改标题时,您必须重新编译直接或间接包含它的所有编译单元。如果不需要包含,则重新编译也不是。你的程序越大,问题就越大,特别是如果你把你的程序分解成了必须手动触发重新编译的作曲家。

  • 添加不需要的依赖项时,预编译器标头可能更有效。

答案 4 :(得分:1)

个人偏好真的...... 只要你保持一致(这使得它易于阅读),它的格式无关紧要。您可以将它全部放在1个头文件中,也可以将它放在需要它的每个文件中。它还取决于其他包含是如何加载主要不需要其包含之后的任何内容等所以使用相同的头文件,所有其他C文件可能会或可能不会(取决于编译器)包括相同的包含多个次。

编辑:我也同意Mac,把它放在你使用它的地方也是一件非常非常好的事情

答案 5 :(得分:1)

我不会故意将所有包含放入单个头文件中,只是因为如果更改其中一个包含的头文件,则必须重新编译包含“master”包含文件的所有内容。这可能会导致单行更改的编译时间不必要。

那就是说,我不会花太多时间来确保我对包含陈述不太自由。一些工程师将花费大量时间来减少包含以节省编译时间,并且我认为他们的时间可以更好地解决问题或处理新功能。

答案 6 :(得分:0)

头文件实际上是您在c程序中包含的内容。它包含结构,宏,函数定义等数据结构。有时单个头文件可以正常,如果你的程序成长为逻辑组件,那么你可能需要更多。