【问题标题】:function declared static but never defined函数声明为静态但从未定义
【发布时间】:2013-03-28 12:09:42
【问题描述】:

我有一个头文件假设 abc.h,其中我的函数声明为:

static int function1();

我已经在abc.c中包含了这个头文件,并定义了函数并使用了它。

static int function1()
{
 < function definition>
}

编译后我收到警告:

warning: function1 declared static but never defined

如何在不删除静电的情况下删除警告。 谢谢。

【问题讨论】:

  • 将前向声明从标头移动到源文件?
  • 如果一个函数是static,你不应该把它放在头文件中(除非inline)...
  • @H2CO3 或私有标头
  • 从函数定义中删除 static 关键字 - 它在那里是多余的。虽然这应该已经奏效了——我想问题出在其他地方。
  • 还要注意 C 中的 ()。在 声明 中,这意味着函数可以接收任何类型的参数。特别是这不被认为是函数的原型。对于定义,它意味着一个根本不接收参数的函数。在 C 语言中,您应该始终使用 (void)

标签: c gcc-warning


【解决方案1】:

可以在头文件中声明静态函数,但这会导致包含头文件的每个源文件都有自己的函数私有副本,这可能不是预期的。

您确定您没有将 abc.h 文件包含在任何其他 .c 文件中吗?

由于将函数声明为静态,因此需要在包含该函数的所有 .c 文件中定义该函数。

【讨论】:

  • 我遇到了同样的问题。显然我应该只在 .c 文件中而不是在头文件中包含静态声明。呃:D
【解决方案2】:

良好做法:在定义静态函数的源文件中声明它们(请同时提供原型),因为这是它们可见的唯一文件。

这样,函数只对该文件可见,这样的可见性问题可以减少可能的代码冲突!因此,只需在 .c 文件中提供原型和静态函数定义。不要在头文件中包含静态函数; .h 文件供外部使用。

重复:Static functions in C

【讨论】:

    猜你喜欢
    • 2012-06-04
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多