C语言关键字(1)——static
1、全局静态变量
在全局变量前加上static,该全局变量就被定义为全局静态变量。
与全局变量相比,全局静态变量的特点有:
1)未初始化的全局静态变量会被程序自动初始化为0,并且存在静态存储区
2)全局静态变量的作用域为该文件,其它文件不可使用该变量
例如:现有test1.c和main.c两个文件
//test1.c
int i = 10;
//main.c
extern int i; //使用全局变量前,必须加extern声明
int main( )
{
printf(“%d\n”,i);
}
输出结果为:10
如果将test1.c修改为
static int i = 10;
则mian.c文件不可使用test1.c中的i。
因此,在变量前加上static可以防止外部文件修改和访问,并且两个文件出现相同变量名时也不会产生冲突。
2、局部静态变量
在局部变量前加static,可以保持局部变量的长久。局部静态变量只在程序刚开始运行的时候完成初始化,并且有且只有一次初始化。如
int fun(void)
{
static int num = 100;
return num—;
}
int main( )
{
int i;
for(i = 0; i < 3; i++)
{
printf(“%d\n”,fun());
}
return 0;
}
程序运行结果为:
100
99
98
如果将static去掉,则程序运行结果为:
100
100
100
3、静态函数
在一个工程中,会有多个源文件,默认情况下各个源文件的函数是全局的。如
在test1.h中声明一个函数:void fun();
在main.c文件中,只要加入#include”test1.h”,就可以调用fun()函数。
但是如果在fun()前加上static:static void fun()
这样就算在main.c文件中加入#include”test1.h”,也不可以调用test1.h中的fun()函数。
因此,静态函数不能被其它文件访问,并且其它文件定义相同名字的函数也不会产生冲突。