C-静态static修饰符
静态static修饰符
局部变量
-
普通局部变量:
在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴.
它的值在初始时是不确定的,除非对其进行初始化.
普通局部变量存储于进程栈空间, 使用完毕会立即释放. -
静态局部变量:
使用static修饰符定义的局部变量, 即使在声明时未赋初值, 编译器也会把它初始化为0.
静态局部变量存储于进程的静态数据区, 即使函数返回, 它的值也会保持不变.
全局变量
全局变量定义在函数体外部, 在全局数据区分配存储空间, 且编译器会自动对其初始化.
- 普通全局变量:
对整个工程可见, 其他文件可以使用extern外部声明后直接使用. 也就是说其他文件不能再定义一个与其相同名字的变量了(否则编译器会认为它们是同一个变量). - 静态全局变量:
仅对当前文件可见, 其他文件不可访问, 其他文件可以定义与其同名的变量, 两者互不影响.
在定义不需要与其他文件共享的全局变量时, 加上static关键字能够有效地降低程序模块之间的耦合, 避免不同文件同名变量的冲突, 且不会误使用.
静态函数
- 静态函数只能在声明它的文件中可见, 其他文件不能引用该函数.
- 不同的文件可以使用相同名字的静态函数, 互不影响.