碰到关键字static,总有种傻傻记不清楚的感觉,看《C和指针》,感觉其中对static总结的不错,特地记下来,给自己提个醒,大家也可以参考下。
来自《C和指针》P42-45
根据不同的上下文,static关键字有不同的意思:
- 当static用于函数定义,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从extern改为internal,但标识符的存储类型和作用域不受影响。用这种方式声明的函数或变量只能在声明它们的源文件中访问。 [注:static只对缺省链接属性为external的声明才有改变链接属性的效果]
- 当static用于代码块内部的变量声明时,static用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响。用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一直存在,而不是每次在代码块开始执行时创建,在代码块执行完毕后销毁。
来自《C和指针》P39-45
- 作用域:代码块作用域、文件作用域(代码块之外声明的标识符)、原型作用域(只适用于在函数原型中声明的参数 名)、函数作用域(只适用于语句标签)
- 链接属性[决定如何处理在不同文件中出现的标识符]:外部(external)、内部(internal)、无(none)
- 存储类型:静态变量、自动变量、寄存器变量