对于这个关键字我一直没有弄清楚,今天特地去花了一定的时间去理解这个关键字。在函数或变量声明时,在数据类型前加上 static 后会有以下几个效果
一、用于函数定义时:
1、函数的链接属性会被修改,从extrenal 变为internal
2、函数的存储类型与作用域不受影响
二、用于变量声明时:
1、将变量的存储类型从自动变成静态
2、链接属性和作用域不受影响
3、生命周期将被延续到整个程序结束
三、最重要的一点:
无论是函数还是变量,一但被冠上static 那么他们只能在被声明的文件中访问!
针对2.3我特别举个栗子:
1 #include <stdio.h> 2 3 int fun(void); 4 5 int main(void) 6 { 7 …… 8 fun(); 9 …… 10 return 0; 11 } 12 13 int fun() 14 { 15 static int a; 16 …… 17 }
这里如果 fun 中的 int a 没有限定符static那么当fun结束后 a 就会被回收,作用域从17行开始到函数结束。但现在就不同了,变量a的声明周期从原本的函数内变成了整个程序,程序开始运行就有了变量a了,到程序结束变量a才会被回收。
但是,但是,但是其作用作用域仍然变不变!
切记,无论是函数还是变量,static一定不会改变作用域,但一定会改变链接域!