链接属性
全局变量和函数具有external链接属性,其余标识符的链接属性则为none。
static关键字可以使链接属性变为internal,而且static只对缺省链接属性为external的声明才有改变链接属性的效果。
存储类型
有三个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。
变量的缺省存储类型取决于它的声明位置:
一:凡是在任何代码块之外声明的变量总是存储于静态内存中,这类变量称为静态(static)变量。
二:在代码块内部声明的变量的存储类型是自动的(automatic),也就是存储于堆栈中,称为自动(auto)变量。
对于代码块内部声明的变量,如果给它加上关键字static,可以使它的存储类型从自动变为静态。
修改变量的存储类型并不修改该变量的作用域,仍然只能在该代码块内部按名字访问。
函数的形式参数不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归。
static关键字
当用于函数定义或者用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标识符的存储类型和作用域不受影响。用这种方式声明的函数或变量只能在声明它们的源文件中访问。
当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响。用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一直存在,而不是每次在代码块开始执行时创建,在代码块执行完毕后销毁。