如何理解C语言static关键字


static虽然是C语言基础,常用来提高程序的模块化特性;但由于使用比较灵活,并不太容易掌握;这里只对其使用做一个总结分享,不足之处,欢迎指正。

变量使用static

  • 局部变量

普通的局部变量,就是我们我们看到的在函数内部定义的变量,这种变量的作用域在函数内部,函数调用完毕后释放;如果不对其显示赋值,编译器并不会对其初始化。

普通局部变量存储在栈区,使用完毕,立即释放

在普通局部变量前面加static关键字,就是静态局部变量。初始化时,如果没有显示赋值,编译器也会将其初始化为0。静态局部变量存储在全局数据区,且生命周期不会随函数调用完毕而结束。

由此可看出,在局部变量前面加static,改变了局部变量的存储方式和生命周期;但作用域还是在函数内部。

静态局部变量分配在全局数据区,由编译器初始化;
作用域不变,依然为定义或者调用它的函数作用域;
生命周期不会随函数结束而结束;
  • 全局变量

全局变量定义在函数体在外,存储在全局数据区,编译器会自动进行初始化。整个工程对普通全局变量可见,其它文件中不能在定义和其相同名字的变量。其它文件使用普通局部变量时,只需要在前面加extern外部声明即可。

静态全局变量存储方式及生命周期不变,依然存储在全局数据区,由编译器自动初始化,但其作用域局限在当前文件中。

一句话总结,static限制了全局变量作用域,对外隐藏了全局变量,有利于程序模块化,同时也避免了不同文件的变量命名冲突。

函数使用static

普通函数可以在不同文件中使用,而且不用使用extern外部声明。所以可以类比全局变量来做分析。

普通函数前面加static关键字就是静态函数,静态函数也对其它文件不可见,只能在声明它的文件可见。其它文件可以使用相同名称的静态函数,不会引起编译器冲突报错。

一句话总结

可见,static的主要作用是对其它文件隐藏变量/函数,局限其作用域,方便模块化。

知识共享许可协议本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,请务必在遵守许可协议的前提下转载。
发布时间:2019-07-29 13:04:18 阅读:192 标签:技术C语言