对我而言,在源文件(即.c文件)中定义和声明静态函数是一条规则。
但是,在极少数情况下,我看到有人在头文件中声明它。由于静态函数具有内部链接,因此我们需要在每个文件中对其进行定义,因此我们在声明该函数的头文件中包含该头文件。在将某些东西声明为静态时,这看起来很奇怪,与我们通常想要的相去甚远。
另一方面,如果有人天真地尝试使用该函数而不定义它,则编译器会抱怨。因此,从某种意义上说,这样做听起来并不奇怪,甚至听起来并不奇怪。
我的问题是:
首先,我想澄清一下您所描述的情况:标头包含(仅)静态函数声明,而C文件包含定义(即函数的源代码)。例如
some.h:
static void f();
// potentially more declarations
some.c:
#include "some.h"
static void f() { printf("Hello world\n"); }
// more code, some of it potentially using f()
如果您描述的是这种情况,我对您的评论表示怀疑
由于静态函数具有内部链接,因此我们需要在每个文件中对其进行定义,因此我们在声明该函数的头文件中包含该头文件。
如果您声明了该函数但未在给定的翻译单元中使用它,则我认为不必定义它。gcc接受警告并接受它;除非我错过了一些东西,否则该标准似乎并没有禁止它。这在您的方案中可能很重要,因为不使用该功能但包含标头及其声明的转换单元不必提供未使用的定义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句