在之前的博客里,曾经对比C++类中static与非static成员函数的区别,现在来归纳下在C语言中修饰了static函数/变量与普通函数/变量的区别。
static全局变量和普通全局变量的区别
相同点:static全局变量和普通全局变量均存储在静态存储区(静态存储在整个程序运行期间都存在)
不同点:
- 作用域不同
- 普通全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
- static全局变量的作用域仅在当前源文件,在同一源程序的其它源文件中不能使用它。
- 初始化
- 未经初始化的static全局变量会被程序自动初始化为0
因此static全局变量有以下优点:
- 不会被其他文件所访问、修改
- 其他文件中可以使用相同名字的变量,不会发生冲突
- 作用域不同
static局部变量和普通局部变量的区别
相同点:作用域相同
不同点:
- 内存中的位置
- static局部变量存储在静态存储区中
- 普通局部变量存储在堆栈中
- 生存周期不同
- 因为静态存储区在整个程序运行期间都存在,static局部变量离开作用域后,并没有被销毁,仍然驻留在内存中
- 普通局部变量离开作用域后会被销毁
- 初始化
- 未经初始化的static局部变量会被程序自动初始化为0
- static局部变量只被初始化一次,下一次依据上一次结果值
- 内存中的位置
static函数与普通函数的区别
static函数只在声明他的文件当中可见,不能被其他文件所用,static函数为内部函数。其他文件中可以定义相同名字的函数,不会发生冲突。因此,不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。