《C和指针》第二版 P44-45
C语言的变量具有3种特征,作用域,链接属性,存储类型。
4种作用域:文件作用域,函数作用域,代码块作用域,原型作用域
3种链接属性:外部external,内部internal,无none
3种存储类型:自动automatic,静态static,寄存器register
当用于不同的上下文环境时,static关键字具有不同含义。
(1)用于函数定义,用于代码块之外的变量声明
static关键字用来修改标识符的链接属性,external改为internal。
用这种方式声明的函数或变量只能在声明它们的源文件中访问。
但标识符的存储类型和作用域不受影响。
(2)用于代码块内部的变量声明
static关键字用来修改变量的存储类型,从自动变量修改为静态变量。
用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一直存在。而不是每次在代码块开始执行时创建,在代码块执行完毕后销毁。
但变量的链接属性和作用域不受影响。