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

C 将所有包含内容放在一个头文件中是一个好主意吗?,c,header-files,C,Header Files,对于C,您在C头文件中输入的内容的最佳实践是什么 将一个程序在多个源文件中使用的所有包含放在一个头文件中有用吗 那么实际上每个文件(即stdio.h)中都使用的include呢?头文件实际上是您从c程序中包含的内容。它包含数据结构,如结构、宏、函数定义等。。有时候一个头文件就可以了,如果你的程序发展成逻辑组件,你可能需要更多。我个人同意“把它放在你使用它的地方”的理念。它使哪些文件使用什么、依赖关系在哪里等变得更加清晰 假设您有一个headerMyHeader.h。如果您对它进行了更改,需要更改

对于C,您在C头文件中输入的内容的最佳实践是什么

将一个程序在多个源文件中使用的所有包含放在一个头文件中有用吗


那么实际上每个文件(即stdio.h)中都使用的include呢?

头文件实际上是您从c程序中包含的内容。它包含数据结构,如结构、宏、函数定义等。。有时候一个头文件就可以了,如果你的程序发展成逻辑组件,你可能需要更多。

我个人同意“把它放在你使用它的地方”的理念。它使哪些文件使用什么、依赖关系在哪里等变得更加清晰

假设您有一个header
MyHeader.h
。如果您对它进行了更改,需要更改依赖它的代码,那么如果使用它的每个文件都有一个
#include“MyHeader.h”
,则很容易找到依赖代码—您只需对include语句进行全局搜索即可


另一方面,如果您只在其他一些头文件中包含
MyHeader.h
,然后将其包含在您的文件中,则您不能这样做,因为使用
MyHeader.h
的文件中的所有内容都是
#包含“MyHugeHeader.h”
,与其他文件相同。

否。它只是增加了成本和开销

作为一名维护人员,您将面临的最大难题之一是找出哪些标头不需要包含,并将其删除。当你看到一个包含20多个标题的列表时,你开始像蛮力一样强行通过它(一次删除一个,看看是否有任何内容中断)


善待那些将来不得不维护你的东西的人。使用每个模块所需的标题,不再使用。。不少于:)

个人偏好真的。。。 它的格式并不重要,只要你是一致的(这使它易于阅读)。您可以将其全部放在一个头文件中,也可以将其放在每个需要它的文件中。它还取决于其他include的加载方式,main之后的任何内容都不需要它的include,以此类推,因此对所有其他C文件使用相同的头文件可能多次包含相同的include,也可能多次不包含相同的include(取决于编译器)


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

有些事情还没有指出:

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

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


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


也就是说,我不会花太多时间来确保我对include语句不太开放。一些工程师会花费大量时间试图减少包含以节省编译时间,我认为他们的时间更适合解决问题或开发新功能。

将所有可能的头放在一个应用程序头中是错误的

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

这使得它很难测试

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

正如所有编程问题一样,做需要做的事情,不多不少。考虑一下维护。考虑构建管理


试想。

…当然,由于您必须在每个受支持的操作系统上测试“是否有任何故障”,可能在多个不同的构建时配置下,这一残酷的操作更加复杂。