static 有3种用法
1, static修饰局部变量
使得局部变量出了自己的范围也不销毁,其实是改变了局部变量的生命周期
但是作用域还是局部的。
void test()
{
static int a = 1;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
test函数中的变量a是局部变量。进入函数的时候,创建局部变量a,调用结束只会局部变量a便会返还给系统。但是在加上static之后,增加了局部变量的生命周期。但是作用域还是局部的。即test函数被调用完了之后,不会被立刻返还给系统,而是继续存在。
2. static修饰全局变量
全局变量本身是具有外部链接属性,但是static修饰全局变量,会使得全局变量失去外部链接属性,变成内部链接属性,所以static修饰的全局变量,只能在自己所在的.c文件中使用。
声明外部变量
extern int g_val;
int main()
{
printf("%d\n", g_val);
return 0;
}
g_val是在另外一个c文件定义的变量,想要使用这个变量就需要使用关键字extern,但是要是在这个变量前面加上static之后,这个变量就会失去外部链接属性。只能在定义这个变量的文件内部使用。
3. static修饰函数
函数默认是具有外部链接属性,但是被static修饰之后,会使得函数失去外部链接属性,变成了内部链接属性,所以static修饰的函数只能在自己所在的.c文件内部使用,不能在其他文件使用。
//声明外部符号
extern int Add(int x, int y);
int main()
{
int a = 10;
int b = 20;
int ret = Add(a, b);
printf("%d\n", ret);
return 0;
}
Add函数是在另外一个c文件里面定义的,想要使用这个函数就需要使用extern关键字。但是要是在定义Add函数的时候,在其前面加上static,那么这个函数就只能在定义这个函数的c文件内部使用。