C中的静态函数

Zac*_*ack 3 c static function

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

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

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

是否有解决此问题的方法,不涉及放置static*.c文件中的函数声明及其定义?虽然这个解决方案没有工作,它打破了我认为是保持在头文件中的声明和定义在实现文件的好习惯.

Dan*_*her 8

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

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

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

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


Kei*_*all 7

static声明不应出现在头文件中(除了inline那些,我暂时忽略它)。如果您想要一个仅出现在模块内部的函数,则.h根本不要将其放入文件中。该.h文件供外部使用。将静态函数放入.c文件中。请注意,如果需要,您仍然可以转发声明该函数。