标识符的作用域

一个标识符的作用域是程序中的一段区域,用于确定该标识符的可见性。当标识符在一段区域中可见时,就可以在该区域内使用此标识符。作用域有五种:

块作用域(局部作用域)

文件作用域(全局作用域)

函数原型作用域

函数作用域

类作用域

块作用域

块是函数中一对花括号(包括函数定义所使用的花括号)所括起的一段区域。在块内说明的标识符具有块作用域,它开始于标识符被说明的地方,并在标志该块结束的右花括号处结束。如果一个块内有一个嵌套块,并且该块内的一个标识符在嵌套块开始之前说明,则这个标识符的作用域包含嵌套块。函数的形参具有块作用域,其开始点在标志函数定义开始的第一个左花括号处,结束于 标志函数定义结束的右花括号处,例如:

void f( int x )

//形参互的作用域开始于此

int y=3; //局部变量y的作用域开始于此

     {

     int z=y+2;//y的作用域该嵌套块的作用域,所以y在该块内可见

     //...

}

int k;//k的作用域开始于此

}

文件作用域

     在函数和类之外说明的标识符具有文件作用域,其作用域从说明点开始,在文件结束处结束。 如果标识符出现在头文件的文件作用域中,则它的作用域扩展到嵌入了这个头文件的程序文件中 ,直到该程序文件结束。文件作用域包含该文件中所有的其他作用域。 在同一作用域中不能说明相同的标识符。 标识符的作用域和其可见性经常是相同的,但并非始终如此。例如:

#include <iostream.h>

int i;//文件作用域

void main()

{

i=5;

     {

     int i; //块作用域

     i=7;    

cout << "i=" << i ;// 输出7  

}

cout<< "i=" << i; //输出5

}

在这个程序中,最外层的i有文件作用域,最内层的i有块作用域,最内层的i隐藏最外层的i, 这时在最内层无法存取文件作用域的i。 通过使用作用域运算符::,可以在块作用域中存取被隐藏的文件作用域中的名字,例如:

#include <iostream.h>

int i;

void main()

{

i=5;

     {

     int i;

     i=7;

     ::i=1;

cout << "i=" << i ; 输出1    7

}

cout<< "i=" << i; //输出1

}

变量可以在文件作用域或块作用域中说明,在文件作用域中说明的变量称全局变量,在块作用 域中说明的变量称局部变量。函数只能在文件作用域中进行定义,但可以在文件作用域或块作用域 内进行函数说明。注意,枚举成员的作用域在括起它们的花括号之外,和枚举标记有相同的作用域。例如:

enum bool {FALSE,TRUE};

bool x=TRUE;

int FALSE; //错,与枚举常量名冲突

函数原型作用域    

     在函数说明的参数表中说明的标识符具有函数原型作用域,该作用域终止于函数原型说明的末尾。例如:

int sum ( int first , int second );

second=0; //错,标识符second在此不可见

函数作用域

     具有函数作用域的标识符在该函数内的任何地方可见。在C++中,只有goto语句的标号具有 函数作用域。因此,标号在一个函数内必须唯一。例如,下面的程序由于在函数中说明了两个同名的标号,因而是错误的。

void f()

{

x:

     cout <<"First Label";

x:

     cout <<"Second Label"; // Error , duplicate label

     //...

if(a>0) goto x;

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值