c-头文件中的静态函数声明



我在一个源文件中有一个静态函数,该函数被同一源文件中的其他函数使用。即使该头文件将包含在其他源文件中,也可以将该静态函数的声明放在头文件中吗?示例:

/* foo.c */
#include "foo.h"

/* exported function; calls g */ 
void f(void) {
g(); 
}
static 
void g(void) {
/* do something... */
}
/* foo.h */ 
void f(void); 
void g(void);

/* main.c */ 
#include "foo.h"
int main(void) {
f();
}

即使该头文件将包含在其他源文件中,也可以将该静态函数的声明放在头文件中吗?

否。考虑一下如果其他源文件具有相同名称的函数/对象/宏,它们会发生冲突。

即使没有冲突;未使用的函数";可能会出现警告@Adrian Mole

通过将static void g(void)放在.h文件中,它增加了不必要的潜在名称冲突。


只需在使用该函数的.c顶部声明/定义该静态函数。

将该静态函数的声明放在头文件,即使该头文件将包含在其他源文件?

否。因为这没有任何意义。为什么?在C中,函数默认为global。与C中的global functions不同,对static functions的访问仅限于声明它们的文件!因此,当我们想要restrict access到函数时,我们使它们成为静态的。

使函数成为静态函数的另一个原因可能是在其他文件中重用相同的函数名。因此,在头文件中声明它们为静态可能会导致其他源文件中的名称冲突。

在头文件中,我们声明我们的API函数——我们只想公开这些函数。在c文件中,我们通常将辅助函数声明为静态函数,以将这些辅助函数的范围限制为仅c文件的

最新更新