在C语言中,static关键字有多种用途,它主要用于控制变量的生命周期和可见性,以及函数的作用域和链接。以下是static在C语言中的主要作用:
1.局部变量中的static
通常,局部变量在函数执行结束后就会被销毁。但是,如果局部变量被声明为static,则该变量在程序执行期间只会被初始化一次,生命周期从程序开始执行时开始,直到程序结束执行时结束。并且其值会在函数调用之间保持不变。这意味着每次函数调用时,该变量都会保留其上次的值。
include <stdio.h>
void counter();
int main()
{
counter();
counter();
counter();
counter();
return 0;
}
/*
* 功能:static定义的局部变量
*/
void counter()
{
static int count = 0; // 静态局部变量
count++;
printf("%d\n", count);
}
运行结果:
![](https://img-blog.csdnimg.cn/direct/dadc83bea65b4332aa371ff0e268b3b2.png)
在这个例子中,count
是一个static
局部变量。每次调用counter
函数时,count
的值都会递增,而不是被重新初始化为0。这是因为count
的生命周期是整个程序的执行期间,它只会在程序开始时初始化一次,并在每次函数调用时保留其值。
需要注意的是,虽然static
局部变量在程序的整个执行期间都存在,但它们仍然只在其声明的代码块(如函数)内部可见。
2.全局变量和函数中的static
当static用于全局变量或函数时,它限制了变量的可见性或函数的作用域。static全局变量或函数只能在声明它们的文件内部访问,而不能被其他文件访问。这提供了封装和数据隐藏的能力。例如,现在我用了一个file1.c 文件写了以下代码:
// file1.c
static int secret = 42; //只在定义它的文件可见
static void hiddenFunction()
{
//只能在定义它的文件中调用
}
在这个例子中,secret变量和hiddenFunction函数都只能在file1.c 文件中访问。在file2.c中不可访问:
extern int secret; 错误:变量secret在file1.c中是static的,这里不可见
extern void hiddenFunction();// 错误:hiddenFunction在file1.c中是static的,这里不可见