假设我们有函数(这里只考虑外部)int foo(int a, char *b),通常会有一个头文件记录函数的作用,每个参数和返回值的作用等。它会也可能是 doxygen 格式。我的习惯是这样的头文件应该进入 .h 文件,因为这是定义接口的地方,读者应该在那个地方拥有所有信息。但是很多人将这些头文件保存在实际执行的 C 文件中。我也在 Linux 内核代码中看到了这一点。那我错了吗?你更喜欢哪个?
3 回答
尽管头文件可以以任何方式使用,但它们主要是一种启用外部链接的机制。
您设计了一个供外部使用的 API,并将使用此 API 所需的所有内容(常量、类型、原型)放在头文件中。
所有其他的东西,这是实现的一部分,不需要被外部用户看到,可以进入源文件(如果使用本地化到一个文件),或者可以在多个之间共享的私有头文件文件。后者是启用外部链接但供内部使用的头文件的另一个示例。
这个问题的答案很大程度上是“取决于”:
根据什么?谁在阅读文档,以及他们如何访问它。
如果您正在开发一个程序,那么将文档与实现内联可能是可以的,因为任何想了解您的程序的人都可以访问源代码并阅读它。您的目标受众可能是开发程序本身的开发人员,因此在 C 文件中包含文档以及他们正在处理的大部分代码是一种合适的方法。
如果您正在开发库,目标受众会发生变化(或者您可能有两个目标受众)。您仍然有开发人员,他们可以使用与私有实现细节相关的更详细的文档。您还有图书馆的用户,他们只关心他们正在使用的界面;从代码浏览的角度来看,它们通常只能访问标题。
如果我有 .h 文件,我会根据自己的选择将它们放入 .h 文件中。如果我只有一个 .c 文件,我会在定义函数时记录它们,因为如果我只有一个 .c 文件,我可能仍在编码,如果我更改代码,我想更改文档。
我觉得文档和声明在一个完成的 c 项目中放在一个单独的文件中。代码中的文档分解了代码并且可能是多余的。
如果我在某个地方做出贡献,我将遵循既定的惯例。