C中的静态函数

我有一个软件模块,包含* .h文件和* .c文件。 变量和函数声明位于* .h文件中,而函数定义位于* .c文件中。 模块中的两个函数是辅助函数,不能在模块外部使用。

使模块用户明白这个意图的最佳方法是什么?

我尝试将函数声明为static ,但在* .h文件中这样做会导致GCC编译器警告函数是“声明为静态但从未定义”。 即使* .c文件使用#include指令包含* .h文件,* .h和* .c文件如何被视为不同的翻译单元?

是否有解决此问题的方法,不涉及将* .c文件中的static函数的声明及其定义放在一起? 虽然这个解决方案确实有效,但它打破了我认为在头文件中保留声明和实现文件中的定义的良好做法。

即使* .c文件使用#include指令包含* .h文件,* .h和* .c文件如何被视为不同的翻译单元?

标头通常也包含在其他源文件中。 这就是警告的原因。

如果编译其他文件(包括头文件),则确实声明了未定义的函数。

好的做法是在定义的源文件中声明静态函数,因为这是它们可见的唯一文件。

static声明不应出现在头文件中(除了inline文件,我现在将忽略它)。 如果您想要一个仅出现在模块内部的function,请不要将其放在.h文件中。 .h文件用于外部消费。 将静态函数放在.c文件中。 请注意,如果需要,您仍可以转发声明函数。

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

重复: 函数声明为static但从未定义过