应该在哪里放置非接口函数原型?

时间:2012-04-10 19:51:47

标签: c header-files function-prototypes

我反复阅读过头文件应该包含其他文件使用源代码所需的所有声明。假设您有一个不被其他源文件直接使用的函数(换句话说,非接口函数)。它的原型应该放在.c文件的顶部,因为它不会被其他文件使用吗?或者它应该放在带有所有其他函数的头文件中,以便在一个地方完全汇总.c文件中的函数?

5 个答案:

答案 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说明符。