作用域:
当变量在程序的某个部分被声明时,它只有在程序的一定区域才能被访问。这个区域由标识符的作用域决定。
标识符的作用域就是程序中该标识符可以被使用的区域。
1.代码作用域:
位于一对花括号之间的所有语句称为一个代码块。任何在代码块的开始位置声明的标识符都具有代码块作用域,表示它们可以被这个代码块中的所有语句访问。
当代码块处于嵌套状态时,声明于内层代码块的标识符的作用域到达该代码块的尾部便告终。然而,如果内层代码块有一个标识符的名字与外层代码块的一个标识符同名,内层的那个标识符就将隐藏外层的标识符——外层 的那个标识符无法在内层代码块中通过你名字访问。
不是嵌套的代码块则稍有不同。声明于每个代码块的变量无法被另一个代码块访问,因为他们的作用域并无重叠之处。
2.文件作用域:
任何在所有代码块之外声明的标识符都具有文件作用域,它表示这些标识符从它们的声明之处直到它所在源文件结尾处都是可以访问的。
3.原型作用域:
原型作用域只适用于在函数原型中声明的参数名,在原型中(与函数的定义不同),参数的名字并非必需 。但是,如果出现参数名,你可以随你所愿给它们取任何名字,它们不必与函数定义中的形参名匹配,也不必与函数实际调用时所传递的实参匹配,原型作用域防止这些参数名与程序其他部分的名字冲突。事实上,唯一可能出现的冲突就是在同一个原型中不止一次地使用同一个名字。
4.函数作用域:
函数作用域只适应于语句标签,语句标签用于 goto 语句。基本上,函数作用域可以简化为一条规则—— 一个函数中的所有语句标签必须唯一。事实上,这个知识我们很少用到。