3.5. C作用域(C和指针第二版)

1. 代码块作用域:

  位于一对花括号之间的所有语句称为一个代码块。任何在代码块的开始位置声明的标识符都具有代码块作用域,表示它们可以被这个代码块中的所有语句访问。图3.1中标识为6、7、9、10的变量都具有代码块作用域。函数定义的形式参数(声明5在函数体内部也具有代码块作用域)。

  当代码块牌嵌套状态时,声明于内层代码块的标识符的作用域到达该代码块的尾部便终止。然而如果内层代码块有一个标识符的名字与外层代码块的一个标识符同名,内层的那个标识符就隐藏外层的标识符--外层的那个标识符无法在内层代码块中通过名字访问。声明9的f和声明6的f是不同变量,后者无法在内层代码块中通过名字来访问。

  不是嵌套代码块的的代码则稍有不同。声明于每个代码块的变量无法被另一个代码块访问,因为它们的作用域培元重叠之处。由于两个代码块的变量不可能同时存在,所以编译器可以把它们存储于同一个内存地址。例如声明10的i可以和声明9的任何一个变量共享同一个内存地址。这种共享并不会带来任何危害,因为在任何时刻,两个非嵌套的代码块最多只有一个处于活动状态。

 

2. 文件作用域

  任何在所有代码块之外声明的标识符都具有文件作用域,它表示这些标识符从它们的声明之处直到它所在的源文件结尾处都是可以访问的。图3.1是的声明1和2都属于这一类。在文件中定义的函数名也具有文件作用域,因为函数名本身并不属于任何代码块(如声明4)在头文件中编写并通过#include指令包含到其他文件中的声明就好像它们是直接写在那些文件中一样。它们的作用域并不局限于头文件的文件尾。

 

3. 原型作用域

  原型作用域只适用于在函数原型中声明的参数名,如图3.1中的声明3和声明8。

 

4. 函数作用域

  它只适用于语句标签,语句标签用于goto语句,基本上,函数作用域可以简化为一条规则--一个函数中的所有语句标签必须唯一。

 

 

 

 

posted @ 2014-04-27 23:50  blankqdb  阅读(350)  评论(0)    收藏  举报