对于这个关键字我一直没有弄清楚,今天特地去花了一定的时间去理解这个关键字。在函数或变量声明时,在数据类型前加上 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一定不会改变作用域,但一定会改变链接域

02-13 20:15