Blog Email GitHub

27 May 2010
c语言中static和extern的作用

最近学习《unix环境编程》时,对于c语言不熟的我,经常有这样的疑惑:static和extern到底有什么作用,和心中的想法一致吗?Google之。

static的三个作用(来自http://club.it.sohu.com/r-program-76259-0-0-0.html):

  • 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
  • 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
  • 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
我认为这样介绍static的作用比较肤浅,这样介绍更深入(来自http://developer.51cto.com/art/200812/103804.htm):
  • 隐藏
  • 保持变量内容的持久
  • 默认初始化为0

对于static可以保持变量内容的持久和默认初始化为0,都是由于static的变量都是存储在静态存储区中的缘故吧!

对于extern的理解和作用, 我想这样一句话就可以解释吧:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。