C语言static关键字的两个作用是作用域和存储域。
作用域:
用static声明的全局变量或函数只能在本文件中使用,不能被其他文件的函数调用,不同的文件可以使用相同名字的变量或静态函数,互不影响,这样极有利于程序的模块化和封装。
存储域:
定义局部变量时如果加上了static关键字就存放在静态区,这一段内存是在main函数执行之前初始化的,所以它只被初始化一次。由于它是在程序运行开始到程序结束一直存在,也就是说它不像栈内存一样会自动释放,而是一直占用着内存。例如:
#include <stdio.h>
int add(void)
{
static int a = 0; // 声明为静态变量
a++;
return a;
}
int main()
{
int i;
for(int i = 0; i < 3; i++)
{
printf("add_val = %d\n", add());
}
return 0;
}
运行结果为:
add_val = 1
add_val = 2
add_val = 3