C 函数声明为静态但从未定义

C 函数声明为静态但从未定义,c,gcc-warning,C,Gcc Warning,假设abc.h有一个头文件,其中函数声明如下: static int function1(); 我已经在abc.c中包含了这个头文件,并且定义了函数并使用了它 static int function1() { < function definition> } 如何在不删除静电干扰的情况下删除警告。 谢谢。可以在头文件中声明静态函数,但这会导致包含头文件的每个源文件都有自己的函数私有副本,这可能不是预期的 您确定没有在任何其他.c文件中包含abc.h文件吗 因为将函数声明为静态函

假设abc.h有一个头文件,其中函数声明如下:

static int function1();
我已经在abc.c中包含了这个头文件,并且定义了函数并使用了它

static int function1()
{
 < function definition>
}
如何在不删除静电干扰的情况下删除警告。
谢谢。

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

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


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

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

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


重复:

将前向声明从头文件移动到源文件?如果函数是
静态的
,则不应将其放入头文件中(除非
内联的
)…@H2CO3或private header从函数定义中删除静态关键字-这是多余的。尽管这应该已经起作用了——我想问题在别处。也要注意C中的
()
。在声明中,这意味着函数可以接收任何类型的参数。特别是,这不被认为是该函数的原型。就定义而言,它意味着一个根本不接收任何参数的函数。在C语言中,你应该总是使用
(void)
,我也有同样的问题。显然,我应该只在.c文件中有静态声明,而不在头文件中。杜:D
warning: function1 declared static but never defined