2018-01-15 创建人:Ruo_Xiao
邮箱:xclsoftware@163.com
一、定义
- 程序中该标识符可以使用的区域。
- 例如:函数内的局部变量的作用域仅限于函数体本身。
说明了两点:
(1)其他的函数无法通过该变量名访问它们。
(2)只要分属不同的作用域,不同的变量可以起相同的名字,并且可以位于相同的地址。
二、分类
- 文件作用域、函数作用域、代码块作用域和原型作用域。
- 标识符声明的位置决定了其作用域。
三、代码块作用域
1、位于一对花括号之间的所有语句称为一个代码块。
2、任何在代码块开始的位置声明的标识符都具有代码块作用域,表示它们可以被这个代码块中所有语句访问。
3、注意:在嵌套模式下,若内层和外层具有相同的变量名,则内层变量隐藏外层变量。
4、形参的作用域变迁历史:
(1)K&R C
形参的作用域开始在形参的声明处,位于函数体之外。若函数体内部声明了名字和形参名相同的局部变量,则它们将隐藏形参。
(2)ANSI C
扼制了K&R C的错误,它把形参的作用域设定到了整个函数体,故局部变量和形参将无法同名。
栗子:
int add(int a,int b)
{
int a = 3; //error C2082: 形参“a”的重定义
return (a+b);
}
四、文件作用域
- 任何在所有代码块之外声明的标识符都具有文件作用域。
- 表示这些标识符从它们的声明之处直到它所在文件的源文件结尾处都是可以访问的。
- 注意:在头文件中写的函数声明和变量声明,其实都是在代码块之外,故都具有文件作用域。由于#include指令,故这些声明的作用域不局限于头文件中。
五、原型作用域
- 只适用于在函数原型中声明的参数名。
- 原型中,参数名并非必须,也可以与函数定义中的参数名不一样。但禁止同一函数原型中用相同的变量名。
六、函数作用域
- 只适用于语句标签,语句标签用于goto语句。
- 实际意义如下:一个函数中所有的语句标签必须唯一。