我理解static的作用,但不知道为什么要使用它。它只是为了保持抽象层吗?
在C语言中,使用 static
有几个原因。
当用于函数时,其意图是创建抽象。C源代码文件范围的原始术语为“翻译单元”。静态函数只能从同一翻译单元内部访问。这些静态函数类似于C ++中的私有方法,可以自由解释(在这种比喻中,翻译单元定义了一个类)。
全局层面上的静态数据也不可从翻译单元外部访问,这也可用于创建抽象。此外,所有静态数据都初始化为零,因此可以使用 static
来控制初始化。
在本地(“自动”)变量级别上使用静态,是用于抽象化函数的实现,该函数在多次调用之间保持状态,但避免使用翻译单元范围内的变量。再次强调,由于静态限定,这些变量被初始化为零。
C中的静态函数
在C中,默认情况下,函数是全局的。在函数名前加上“static”关键字可以使其变为静态函数。例如,下面的函数fun()是静态的。
static int fun(void)
{
printf("I am a static function ");
}
/* Inside file1.c */
static void fun1(void)
{
puts("fun1 called");
}
请将以下程序存储在另一个名为file2.c的文件中。
/* Iinside file2.c */
int main(void)
{
fun1();
getchar();
return 0;
}
gcc file2.c file1.c
编译上面的代码,我们会得到错误undefined reference to fun1
。这是因为在file1.c中,fun1
被声明为static
,无法在file2.c中使用。请参见此处的解释,其中包含代码来源。