Static的使用

(一)

        当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修饰修改标识符的连接属性,从external改为internal,但是标识符的存储类型和作用域不受影响。用这种方式声明的函数或变量只能在声明它们的源文件中访问。

        当它作用域代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但是变量的连接属性和作用域不受影响。用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一直存在,而不是每次在代码块开始执行时创建,在代码执行完毕后销毁。

(二)

        具有external连接属性的实体在其他语言里术语里全局实体,所有源文件中的所有函数均可以访问它。只要变量并非声明于代码块或函数定义内部,它在缺省情况下的连接属性即为external。如果一个变量声明于代码块内部,在它前面添加external关键字将使它所引用的是全局变量而非局部变量。

        具有external连接属性的实体总是具有静态存储类型。

注意:(1)函数中的静态变量是静态局部变量,函数退出后不被释放,在程序运行结束时才释放。只在函数中访问。

        (2)静态全局变量的作用域只能是定义它的文件里,不被其他文件使用。

        (3)static定义的静态变量分为两类,一类是修饰局部变量,一类是修饰全局变量或者函数。用法也完全不同(主要体现在作用域、连接属性上面),但是有一点是确定的,如果是有初始值的static变量则分布在.data段,未初始化的static变量则分布在.bss段上面,他们的生命周期都是整个程序结束时才释放。

      

原文地址:https://www.cnblogs.com/cynthia-dcg/p/6001429.html