【发布时间】:2013-12-23 00:04:00
【问题描述】:
我知道静态函数的名称仅在声明它的文件(翻译单元)中可见。这使得封装成为可能。
但是静态函数通常是在源文件中声明的,因为如果你在头文件中声明,你最终会得到它的多个实现(我认为这不是static的意图)。
例子:
main.c
#include "functions.h"
int main()
{
FunctionA();
FunctionB(); // Can't call regardless of "static".
return 0;
}
functions.h
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
void FunctionA();
#endif /* FUNCTIONS_H */
functions.c
#include "functions.h"
#include <stdio.h>
static void FunctionB(); // Same whether "static" is used or not.
void FunctionA()
{
printf("A");
}
void FunctionB()
{
printf("B");
}
那么static 什么时候有用?
【问题讨论】:
-
它大致相当于 OOP 中的
private方法 - 有时您不希望除您自己的库之外的任何其他人都可以使用内部函数。 -
要查看用途,您需要拥有多个 .c 文件。在两者中实现一个名为
private_helper()的函数,看看会发生什么。 -
当你想从functions.c中的FunctionA调用FunctionB时。
static用于未导出的函数。