1. 外部静态变量和局部静态变量都是程序被编译时分配存储,在程序运行结束后回收所占用的存储单元。
2. 外部静态变量的作用域是外部静态变量所在的文件内从变量定义之后直至文件结束。
局部静态变量的作用域是局部静态变量所在的块内从定义之后直至该块结束。
3. 外部静态变量的初始化同外部变量,在变量定义性说明时进行,赋初始的操作在整个程序运行期间仅执行一次,显式初始化值必须是常量表达式,若无显式初始化,则由系统自动初始化为与变量类型相同的0初值。
局部静态变量在第一次进入该块时执行一次且仅执行一次初始化,在有显式初始化的情况下,初值由说明符中的初值确定,若无显式初始化,则由系统自动初始化为与变量类型相同的0初值。
4. 外部静态变量与外部变量的区别:
外部静态变量只有定义性说明,没有引用性说明,作用域局限于其所定义的文件内,不能在其他文件中进行引用型说明或使用。
外部变量能在一个文件中进行定义性说明,而在另一个文件中进行extern引用性说明并使用。
5. 错误示例:
// C2159.cpp
// compile with: /c
static int i;
// OK
extern static int i;
// error C2159: 指定了一个以上的存储类
6. 小结:
static无法跨文件使用。