本篇文章主要根据不同使用场合,来分析三种在程序运行期间一直可以修改的变量
1. static 局部变量
当只是某个.c源文件中的某个函数需要使用它时,它的生存期为整个源程序,但是其作用域仍与局部变量相同,只能在定义该变量的函数内使用该变量.
2. static全局变量
当某个.c源文件中所有函数都使用这个变量时, 它的生存期为整个源程序,其作用域也是,且不能被其他源文件调用.但如果将此变量定义在头文件中且其他源文件也使用这个static时,每个源文件会开配不同存储空间.具体例子见[1]第(5)所示. 根据分析,我们一般将static变量定义在.c文件中仅供本源文件使用
3.非静态全局变量(extern)
当多个.c源文件都要使用该变量时, 其生存期是整个程序运行期间,作用域是所有源文件.与static变量的区别是非静态的全局变量在各个源文件中都是有效的. 而静态全局变量则限制了其作用域. 即只在 定义该变量的源文件内有效.
较好的定义方式是: (1)在某个.h文件中用extern type variable;声明该全局变量
(2)在某个.c文件中定义并初始化该变量type variable = init() (不能在某个函数内部)
(3)在需要使用的.c源文件,include该变量所在的头文件即可
Reference
[1] C++全局变量的声明和定义
[2] C语言之static静态变量