C语言中的静态函数
我有一个由*.h文件和*.c文件组成的软件模块。变量和函数声明位于*.h文件中,而函数定义位于*.c文件中。模块内的两个函数是辅助函数,不打算在模块外使用 向模块用户明确此意图的最佳方法是什么 我试图声明函数C语言中的静态函数,c,function,static,C,Function,Static,我有一个由*.h文件和*.c文件组成的软件模块。变量和函数声明位于*.h文件中,而函数定义位于*.c文件中。模块内的两个函数是辅助函数,不打算在模块外使用 向模块用户明确此意图的最佳方法是什么 我试图声明函数静态,但在*.h文件中这样做会导致GCC编译器警告函数“声明为静态但从未定义”。即使*.c文件使用#include指令包含*.h文件,但*.h和*.c文件如何被视为不同的翻译单元 是否有一种解决方案不涉及将要进行的函数声明静态以及它们的定义放在*.c文件中?虽然这个解决方案确实有效,但它打破
静态
,但在*.h文件中这样做会导致GCC编译器警告函数“声明为静态但从未定义”。即使*.c文件使用#include
指令包含*.h文件,但*.h和*.c文件如何被视为不同的翻译单元
是否有一种解决方案不涉及将要进行的函数声明静态
以及它们的定义放在*.c文件中?虽然这个解决方案确实有效,但它打破了我认为在头文件中保存声明和在实现文件中保存定义的良好做法
即使*.c文件使用#include指令包含*.h文件,如何将*.h和*.c文件视为不同的翻译单元
头文件通常也包含在其他源文件中。这就是发出警告的原因
如果编译其他文件(包括头文件),则确实声明了一个未定义的函数
好的做法是在定义静态函数的源文件中声明静态函数,因为这是它们在其中可见的唯一文件。
static
声明不应出现在头文件中(除了内联的
声明,我现在将忽略它)。如果您想要一个只出现在模块内部的函数,请不要将其放入.h
文件中。.h
文件供外部使用。将静态函数放入.c
文件中。请注意,如果需要,您仍然可以向前声明函数。在源文件中声明它们定义的静态函数(请同时提供原型),因为这是它们在其中唯一可见的文件
重复:+1个静态函数仅限于1个翻译单元,它们只能在该单元中声明和定义。