| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 423 人关注过本帖
标题:求教几个概念问题
只看楼主 加入收藏
langren2526
Rank: 2
等 级:论坛游民
帖 子:46
专家分:37
注 册:2010-3-12
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:1 
求教几个概念问题
函数作用域; 函数原型作用域; 文件作用域;
书上只是稍微提了下,很模糊。 这几个作用域具体是指什么?

搜索更多相关主题的帖子: 概念 
2010-03-23 00:00
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:10 
标识符的作用域

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

块作用域(局部作用域)

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

函数原型作用域

函数作用域

类作用域

块作用域

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

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;

}
百度的第一条记录就是了……


简单的生活
2010-03-23 08:32
快速回复:求教几个概念问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026639 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved