在C语言中,static关键字用于普通变量和函数,它用于定义一个静态的变量或函数。下面对于它们各自的特点进行一下小结:
静态全局变量
在函数外部定义的变量前加上关键字static,这样定义的变量就是一个静态全局变量,有如下特点:
存储于程序的全局数据区,作用范围为整个文件,与全局变量不同的是:静态全局变量只作用于本文件,对于其他文件是不可见的。
例如,在一个文件中用如下语句定义一个全局变量:int i = 0; 如果想在另一个文件中使用这个变量的话,只需在另一个文件中以如下方式声明:extern int i;但是对于一个静态全局变量这样做会引起编译错误。
- 未初始化的静态变量会被系统初始化为0
静态局部变量
一个在函数内部定义的静态变量就是一个静态局部变量。
- 对于普通的局部变量,会被存储在程序的栈区,当函数被调用时就会在它的调用栈中为它的局部变量分配内存,当函数调用结束时,局部变量也会随着调用栈的清除而被清除。而静态局部变量则不同,它被存储在程序的全局数据区,不会随着函数调用的结束而被清除。所以每一次函数调用中对于静态局部变量的修改都是基于上一次调用时修改的结果的。
- 虽然静态局部变量被存储在全局数据区,但是它的作用域只在定义它的函数内部,它所占的内存会随着整个程序的结束而被释放,这一点与全局变量是相同的。
静态函数
我们知道在C语言中函数是可以跨文件调用的,只需在调用前对准备调用的函数原型进行声明即可。假如我们希望一个函数的作用范围仅限于它的定义所在的文件,就可以使用静态函数。定义的形式如下:
static void func()
{
//definition of the func
}