可能重复:
C/C++: Static function in header file, what does it mean?
When to put static function definitions in header files in C?
在头文件中使用静态函数的优缺点是什么?
答案 0 :(得分:3)
假设您在头文件中实现它,每次包含头时,该函数都将被复制。这意味着更重的二进制,糟糕的做法以及调试和维护的整体噩梦。
如果只是在标题中定义它,则需要在每个C文件中实现。
修改的
编辑2 这是你可以遇到的陷阱
static.h
#ifndef _STATIC_H_
#define _STATIC_H_
#include <stdio.h>
static void printer(void);
void nonStatic (void);
#endif
交流转换器
#include "static.h"
static void printer(void)
{
printf ("half the truth : 21\n");
}
int main (void) {
printer();
nonStatic();
}
b.c
#include <stdio.h>
#include "static.h"
static void printer (void)
{
printf("Truth : 42\n");
}
void nonStatic(void)
{
printf ("Non static\n");
printer();
}
查看此代码,您从两个不同的位置调用“printer”,您会遇到不同的行为:
D:\temp>gcc -o temp.exe a.c b.c && temp
half the truth : 21
Non static
Truth : 42
在这个小例子中显而易见,隐藏在一个大软件中真的很棘手