C函数头位置:.h或.C?

C函数头位置:.h或.C?,c,coding-style,C,Coding Style,假设我们有函数(这里只考虑外部函数)intfoo(inta,char*b),通常会有一个标题,记录函数的作用,每个参数和返回值的作用,等等。它可能也是doxygen格式的。我的习惯是,这样的头应该放在.h文件中,因为接口是在那里定义的,读者应该在那里拥有所有信息。但是很多人在C文件中保留了这样的头文件,而实际的实现是在C文件中进行的。我在Linux内核代码中也看到了这一点。那么我错了吗?您喜欢哪一种?这个问题的答案主要是“视情况而定”: 取决于什么?谁在阅读文档,以及他们如何访问文档 如果您正在

假设我们有函数(这里只考虑外部函数)intfoo(inta,char*b),通常会有一个标题,记录函数的作用,每个参数和返回值的作用,等等。它可能也是doxygen格式的。我的习惯是,这样的头应该放在.h文件中,因为接口是在那里定义的,读者应该在那里拥有所有信息。但是很多人在C文件中保留了这样的头文件,而实际的实现是在C文件中进行的。我在Linux内核代码中也看到了这一点。那么我错了吗?您喜欢哪一种?

这个问题的答案主要是“视情况而定”:

取决于什么?谁在阅读文档,以及他们如何访问文档

如果您正在开发一个程序,那么将文档与实现内联可能是可以的,因为任何想了解您的程序的人都可以访问源代码并阅读它。您的目标受众可能是开发程序本身的开发人员,因此将文档和他们正在处理的大部分代码放在C文件中是一种合适的方法


如果您正在开发一个库,目标受众会发生变化(或者您可能有两个目标受众)。您仍然有开发人员,他们可以使用与私有实现细节相关的更详细的文档。你也有图书馆的用户,他们只关心他们正在使用的界面;从代码浏览的角度来看,他们通常只能访问标题。

这个问题的答案在很大程度上是“视情况而定”:

取决于什么?谁在阅读文档,以及他们如何访问文档

如果您正在开发一个程序,那么将文档与实现内联可能是可以的,因为任何想了解您的程序的人都可以访问源代码并阅读它。您的目标受众可能是开发程序本身的开发人员,因此将文档和他们正在处理的大部分代码放在C文件中是一种合适的方法


如果您正在开发一个库,目标受众会发生变化(或者您可能有两个目标受众)。您仍然有开发人员,他们可以使用与私有实现细节相关的更详细的文档。你也有图书馆的用户,他们只关心他们正在使用的界面;从代码浏览的角度来看,它们通常只能访问头文件。

尽管头文件可以以任何方式使用,但它们主要是一种启用外部链接的机制

您设计了一个供外部使用的API,并将使用此API所需的所有内容(常量、类型、原型)都放在头文件中


所有其他的东西,作为实现的一部分,不需要外部用户看到,可以放在源文件中(如果使用被本地化为一个文件),或者可以在多个文件之间共享的私有头文件中。后者是头文件启用外部链接的另一个示例,但用于内部使用。

尽管头文件可以以任何方式使用,但它们主要是启用外部链接的机制

您设计了一个供外部使用的API,并将使用此API所需的所有内容(常量、类型、原型)都放在头文件中


所有其他的东西,作为实现的一部分,不需要外部用户看到,可以放在源文件中(如果使用被本地化为一个文件),或者可以在多个文件之间共享的私有头文件中。后者是启用外部链接的头文件的另一个示例,但用于内部使用。

如果有.h文件,我会根据自己的选择将它们放在.h文件中。如果我只有一个.c文件,我会在定义函数时记录它们,因为如果我只有一个.c文件,我可能还在编码,如果我更改了代码,我想更改文档

我觉得在一个完成的c项目中,文档和声明一起放在一个单独的文件中。代码中的文档会分解代码,并且可能是多余的


如果我在某个地方有所贡献,我会遵循既定的惯例

如果我有一个.h文件,我会根据自己的选择将它们放在.h文件中。如果我只有一个.c文件,我会在定义函数时记录它们,因为如果我只有一个.c文件,我可能还在编码,如果我更改了代码,我想更改文档

我觉得在一个完成的c项目中,文档和声明一起放在一个单独的文件中。代码中的文档会分解代码,并且可能是多余的


如果我在某个地方有所贡献,我会遵循既定的惯例

你是说文档注释应该放在哪里?如果文档不是源文件本身,而是经过(比如)doxygen预处理的,那么真正的文档是HTML/PDF文件,所以无论它是在
.h
还是
.c
中都不重要。我应该补充一点,重要的是一致性,以便未来的开发人员可以遵循可预测和可接受的编码实践。@jxh“是”文档注释。我只考虑代码浏览场景。使用HTML/PDF显然不重要。你是说文档注释应该放在哪里?如果文档不是源文件本身,而是经过(比如)doxygen预处理的,那么真正的文档是HTML/PDF文件,所以无论它是在
.h
还是
.c
中都不重要。我应该补充一点,重要的是一致性,以便未来的开发人员可以遵循可预测和可接受的编码实践。@jxh“是”文档注释。我只考虑代码浏览场景。使用HTML/PDF显然无关紧要