1.关键字static的作用
- 修饰局部变量
static修饰局部变量时,使得被修饰的变量成为静态变量,存储在静态区。存储在静态区的数据生命周期与程序相同,在main函数之前初始化,在程序退出时销毁。(无论是局部静态还是全局静态)
如:
#include<stdio.h>
void text()
{
static int a = 1;
a++;
printf("%d\n", a);
}
int main()
{
int i = 0;
while (i < 5)
{
text();
i++;
}
}
- 修饰全局变量
全局变量本来就存储在静态区,因此static并不能改变其存储位置。但是,static限制了其链接属性。让静态全局变量只能在自己所在的源文件内部使用(即改变了作用域)。
如:
#include<stdio.h>
static int g_val = 10;
int main()
{
extern int g_val;
printf("g_val=");
printf("%d", g_val);
return 0;
}
若 static int g_val = 10; 不在自己所在的源文件内部使用。
如:
则会报错:1>text01.obj : error LNK2001: 无法解析的外部符号 “int g_val”
3. 修饰函数
static修饰函数改变了函数的链接属性
外部链接属性->内部链接属性。使得函数只能在包含该函数定义的文件中被调用。