“语言的作用域规则”是一组确定一部分代码是否“可见”或可访问另一部分代码和数据的规则。
C 语言中的每一个函数都是一个独立的代码块。一个函数的代码块是隐藏于函数内部的,
不能被任何其它函数中的任何语句(除调用它的语句之外)所访问(例如,用 g o t o 语
句跳转到另一个函数内部是不可能的)。构成一个函数体的代码对程序的其它部分来说是
隐蔽的,它既不能影响程序其它部分,也不受其它部分的影响。换言之,由于两个函数有
不同的作用域,定义在一个函数内部的代码数据无法与定义在另一个函数内部的代码和数
据相互作用。
C 语言中所有的函数都处于同一作用域级别上。这就是说,把一个函数定义于另一个函数
内部是不可能的。
4.2.1 局部变量
在函数内部定义的变量成为局部变量。在某些 C 语言教材中,局部变量称为自动变量,这
就与使用可选关键字 a u t o 定义局部变量这一作法保持一致。局部变量仅由其被定义的
模块内部的语句所访问。换言之,局部变量在自己的代码模块之外是不可知的。切记:模
块以左花
括号开始,以右花括号结束。
对于局部变量,要了解的最重要的东西是:它们仅存在于被定义的当前执行代码块中,即
局部变量在进入模块时生成,在退出模块时消亡。
定义局部变量的最常见的代码块是函数。例如,考虑下面两个函数。
整数变量 x 被定义了两次,一次在 func1()中,一次在 func2()中。func1()和 func2()中
的 x 互不相关。其原因是每个 x 作为局部变量仅在被定义的块内可知。
语言中包括了关键字 auto,它可用于定义局部变量。但自从所有的非全局变量的缺省值假
定为 auto 以来,auto 就几乎很少使用了,因此在本书所有的例子中,均见不到这一关键
字。
在每一函数模块内的开始处定义所有需要的变量,是最常见的作法。这样做使得任何人读
此函数时都很容易,了解用到的变量。但并非必须这样做不可,因为局部变量可以在任何
模块中定义。为了解其工作原理,请看下面函数。
评论0