我反复阅读过头文件应该包含其他文件使用源代码所需的所有声明。假设您有一个不被其他源文件直接使用的函数(换句话说,非接口函数)。它的原型应该放在.c文件的顶部,因为它不会被其他文件使用吗?或者它应该放在带有所有其他函数的头文件中,以便在一个地方完全汇总.c文件中的函数?
答案 0 :(得分:5)
标题包含接口信息(外部世界需要使用“模块”中的功能 - 例如.c文件)。所以内部函数(不从外部使用)不会进入标题
在.c文件中,它取决于组织
答案 1 :(得分:3)
是的,私有函数的原型应该放在与函数相同的.c
文件中。标头定义了外部接口。
一些程序员宁愿按照它们使用的顺序定义函数,而不是转发声明,因此原型是不必要的。当然,如果两个或多个函数相互调用,则无法执行此操作。
我个人的偏好是首先声明所有功能,因此您将对该文件进行概述。
如果您具有在单个模块中使用的功能(一起实现功能单元的一小组文件),则创建第二个模块特定的头文件是完全合理的。模块中的所有文件 - 但没有外部源文件 - 将#include
它。
答案 2 :(得分:3)
如果其他.c文件没有使用该函数,则它不应该在头文件中有原型。你应该给它static modifiler,并放置它 原型位于(仅).c文件的顶部,使用它。
如果合理且可能,您可以在所有之前定义功能 调用它的函数,所以你甚至不需要原型。
答案 3 :(得分:0)
鉴于头文件本质上是在C中声明外部接口的唯一方法,不属于该接口的东西不应该在头文件中。
C就是这样,有时这是不实际的,因为外部可见定义的内部视图需要引用它;在这种情况下,您可以将其放在标题中,但受#define
保护,明确指出其内部出处,同样使用#ifdef
选择需要它的定义的内部版本与外部版本。 (你会经常在系统头文件中看到这个。)不过最好尽量避免这种情况。
答案 4 :(得分:0)
在我看来,放在.c
源文件顶部的原型语法中的所有函数声明都是好的风格。它还用于记录读者的源代码。
您不希望将声明放在.h
头文件中,因为您不必要地暴露程序的内部。
哦,不要忘记在函数声明中添加static
说明符。