声明和定义作用域.PDF

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
声明和定义 严格说,声明(declaration )和定义(definition )不一样 声明: • 说明一个事物的存在和它的一些属性,例如变量与其类型。根据声明可 以确定被声明事物的使用方式。对象声明并不实际建立对象 • 例如:C 语言的外部(extern )变量声明,函数原型声明 定义: • 是声明,具有说明同样的基本作用 • 对象定义要求程序运行时创建被定义对象 • 对于子程序,需要提供子程序的体 • 对于变量,可能提供变量的初始值,造成的实际动作包括为变量分 配存储和可能的初始化 一些语言的标准里严格区分了两种情况,有些没严格区分这两个术语 2012年3月 23 作用域 定义(声明)建立名字与事物之间的约束,这一约束在源程序里(在源程序 的正文里)的作用范围称为这一约束的作用域(scope ),也说是这个定义或 声明的作用域 • 声明有确定的作用范围(作用域),只在确定范围里有效 • 在声明的作用域里,被声明名字指称相应的对象 我们(人/语言处理器)根据作用域确定一个名字对应的事物 例:C 局部变量在其定义所在的复合语句里可用(从定义位置开始) 局部变量定义的作用域就是这个复合语句,从定义开始 作用域单位:通常规定一些程序结构作为名字/对象约束的作用域 不同语言里的规定可能不同 常见作用域单位:子程序/ 函数,复合语句,类,等等 2012年3月 24 作用域 早期Fortran 的作用域结构很简单 由于人们认识到信息局部化的重要性,引进了许多作用域单位 Algol 60 引进块(block )结构作为基本作用域单位 允许任意嵌套的局部作用域 子程序看作是有名字且可被调用的块 现在一般语言都以子程序(过程/ 函数)作为作用域单位,一些语言允许子 程序体内部的嵌套作用域(如C 的复合语句) 其他作用域单位: • 结构/记录的声明,OO语言里的类定义(声明) • 模块结构(如C++ 的名字空间,Ada 的包) • C 源文件,也是一种作用域单位(static 外部函数和变量的作用域) 学习一种语言时,必须弄清楚语言中有哪些作用域单位 2012年3月 25 作用域:作用域单位 不同语言对作用域单位和作用域有一些不同的规定。例如: 一些语言里有全局作用域,供定义全局的标识符与对象(和其他事物)的 约束。除全局作用域外的其他作用域都是局部的 C 语言的全局作用域里可以定义/声明变量、函数、类型等。函数只允许定 义在全局作用域里(不允许在函数内部嵌套定义函数) C 语言的局部作用域是复合语句(函数体也是复合语句)。C++ 对C 的作 用域做了许多扩充 在Java 语言的全局作用域里只能定义类,其他的实体都只能定义在类内 部的各种局部作用域里 Fortran 只有全局作用域和子程序作用域,子程序内部没有嵌套作用域 Basic (老的)只有一个全局作用域,所有变量定义都在一个作用域里。定 义在子程序里的变量也具有全局作用域(难以编写大程序) 2012年3月 26 作用域 2012年3月 27 作用域:冲突和嵌套 int n; int p (int n) { 通常规定: double x;

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档