【问题标题】:What sense does it make to declare a function more than one time in C?在 C 中多次声明一个函数有什么意义?
【发布时间】:2026-01-04 08:55:01
【问题描述】:

我见过几次,头文件中函数的原型声明在 c 文件中被逐字重复。

在 C 中可以多次声明一个函数——但它有什么意义呢?只是为了提高可读性还是我缺少一些更深入的见解?

【问题讨论】:

  • 看情况,你说的具体情况能不能展示一下?
  • 恕我直言,它没用,但也无害。但是如果第二个声明与第一个不同(在参数的数量和类型方面),那么你会得到一个编译错误。
  • Prolly 作者的编辑/复制粘贴错误。
  • @iharob - 实际上我无法举个例子,因为我看不到任何模式。我正在开发一个新项目,头文件的所有函数声明都在 c 文件中重复。每个模块都一样。模块的所有头文件都汇总在一个头文件中,该头文件包含在每个模块中。所以我想严格把所有全局函数声明移到头文件中,并在c文件中包含模块函数声明

标签: c function prototype declaration


【解决方案1】:

这是可能的。这没有任何意义。

但它也不会造成任何伤害。您可以根据需要多次声明一个函数,但每个这样的声明必须与其他声明相同。所以这样做是没有意义的。正如有人建议的那样,可能是复制/粘贴错误。

你只能有一个函数定义,它应该总是在c文件中。


这就是你应该这样做的方式:

  • 作为调用者接口一部分的函数声明应该在 h 文件中,并且只有。

  • 只能从 c 文件本身内部获得的局部(私有)函数的函数声明应该在 c 文件中,并且只在 c 文件中。此类函数应声明并定义为static

【讨论】:

    【解决方案2】:

    重复的函数声明无用语义目的,但它们可能由于历史原因、本地编码约定或其他原因而出现。

    例如,可能是本地编码约定,即每个源文件中的每个函数都在该文件的开头进行原型化。这有一些小的实际用途,例如作为每个文件中定义的函数的清单,并使每个文件中的函数能够忽略任何关于同一文件中的其他函数是否在标头中声明的问题。

    此外,同一函数或对象的多个声明不一定相同,它们只需要兼容。在某些情况下,在头文件中提供一个不太具体的原型并在包含函数定义的源文件中提供一个更具体的原型(它本身用作另一个声明)可能是有意义的。

    【讨论】: