var
Ch: Char;
L: Integer;
Source, Dest: PChar;
begin
...
end;
声明的第一行是函数头,剩下的所有行构成了块。Ch、L、Source和Dest是局部变量,它们的声明仅作用于UpperCase函数块中,并且覆盖(仅在这个块中)在程序块或单元的接口(或实现)部分对同一个标志符的声明。
Scope(范围)
一个标志符,比如变量或函数名,只能用于它声明的范围。声明的位置决定了它的范围,在声明程序、函数或过程时声明的标志符,它们的范围限是声明它的块;在单元的接口部分声明的标志符,它的范围包括使用它的任何其它单元或程序。具有较小范围的标志符,特别是函数和过程中声明的标志符,有时称为局部的(local);具有较大范围的标志符称为全局的(global)。
决定标志符范围的规则如下: 若标志符声明出现在……
程序、函数或过程声明
单元的接口部分
单元的实现部分,但不是在任何函
数或过程的块中。
记录类型的定义中(也就是说,标
志符是记录的一个字段名)
类的定义中(也就是说,标志符是
类的字段、属性或方法名) 它的范围扩展到…… 从它声明的地方到当前块的末尾,包括当前块所包含的所有块。 从它声明的地方到单元的末尾,也包括使用这个单元的其它任何单元或程序。(参考Programs and units) 从它声明的地方到单元的末尾,标志符对单元中的任何函数或过程是可用的,若有初始化和结束化部分的话,也包括它们。 从它声明的地方到记录类型定义的末尾(参考Records)。 从它声明的地方到类定义的末尾,包括它的派生类;还包括类和派生类的所有方法块(参考Classes and objects)。
命名冲突
当一个块包含另一个时,前者称为外部块,后者称为内部块。若外部块声明的标志符在内部块被重新声明,则内部声明覆盖外部声明,也决定了标志符在内部块中的意义。比如,若你在单元的接口部分声明- 40 -
Syntactic elements
了变量MaxValue,又在这个单元的一个函数中以同一个名字声明了另一个变量,在函数块中,没有限定的MaxValue指的是后者,是局部声明。类似的,当一个函数声明出现在另一个函数中时,它开辟了一个新的内部范围,在这里能重新声明被外部块使用的标志符。
使用多个单元令范围的定义复杂化。在uses子句中列出的每个单元,它引入(impose)一个新范围,这个范围包含uses子句中列在它之后的单元以及包含uses子句的程序或单元。在uses子句中最先列出的单元表示最),每个接下来的单元表示前一个中的一个新范围。若两个或多个单元在接口部分声明了相同的标志符,没有限定的标志符引用使用最内层的声明,也就是说,是引用本身所在的单元,或者,若此单元没有声明它的话,则是uses子句中声明它的单元中的最后一个。
System单元被每个程序或单元自动使用,它包含的声明,以及编译器自动解析的内置(预定义)类型、例程和常量,总是具有最。
通过使用限定符(参考Qualified identifiers)或
规则来绕过内层声明。 with语句(参考With statements),你可以覆盖这些范围
- 41 -
Data types, variables and constants
Data types, variables and constants(数据类型、变量和常量)
Data types and variables: Overview(概述)
类型在本质上是一种数据的名称。当声明一个变量时,必须指定它的类型;类型决定了它的取值范围和可以进行的操作(运算)。每个表达式返回一个特定类型的值,函数也是如此;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-26.html
好喜欢好喜欢周笔畅