我反复阅读过,头文件应包含其他文件使用源代码所需的所有声明。然后假设您有一个不被其他源文件直接使用的函数(换句话说,一个非接口函数)。它的原型是否应该放在 .c 文件的顶部,因为它不会被其他文件使用?还是应该将它与所有其他函数一起放在头文件中,以便将 .c 文件中存在的函数完全汇总到一个地方?
5 回答
标头包含接口信息(外部世界使用“模块”中的功能所需的任何信息——例如.c 文件)。所以内部函数(不从外部使用),不要进入标题
在 .c 文件中,它取决于组织
- 有些人喜欢在顶部列出所有内部函数声明,所以它们在一个地方。
- 其他依赖于排序,因此函数由使用时间定义(在另一个函数中);并且仅在必要时前向声明它(例如相互调用的递归函数)
是的,私有函数的原型应该和函数放在同一个.c
文件中。标头定义了外部接口。
与前向声明不同,一些程序员更喜欢按照函数的使用顺序来定义函数,这样就不需要原型了。当然,如果两个或多个函数相互调用,则不能这样做。
我个人的偏好是首先声明所有的函数,这样你就会对文件有一个概览。
如果您有在单个模块中使用的函数(一小组共同实现一个功能单元的文件),那么创建第二个特定于模块的头文件是完全合理的。模块中的所有文件——但没有外部源文件——都会#include
。
如果该函数未被其他 .c 文件使用,则它不应在头文件中有原型。您应该给它静态 修改器,并将原型放在使用它的(唯一).c 文件的顶部。
如果合理可行,您可以在调用它的所有函数之前定义该函数,因此您甚至不需要原型。
鉴于头文件本质上是在 C 中声明外部接口的唯一方法,因此不属于该接口的内容不应出现在头文件中。
C 是什么,有时这并不实际,因为外部可见定义的内部视图需要引用它;在这种情况下,您可以将它放在标题中,但受#define
明确指示其内部出处的 a 保护,并且同样用于#ifdef
选择需要它的定义的内部版本和外部版本。(您会经常在系统头文件中看到这一点。)不过,最好尽量避免这种情况。
在我看来,将原型语法中的所有函数声明放在.c
源文件的顶部是一种很好的风格。它还可以为读者记录您的源代码。
您不想将声明放在.h
头文件中,因为您会不必要地暴露程序的内部结构。
哦,别忘了static
在函数声明中添加说明符。