在uses子句中,你只需列出被程序或单元直接引用的单元。也就是说,如果单元A使用单元B中声明的常量、变量、类型、过程或函数,则A必须明确引用单元单元A是间接引用单元C。这种情况下,在单元它还是必须能找到B和C。
下面的实例演示了间接引用: program Prog; uses Unit2; const a = b; ...
unit Unit2; intece uses Unit1; const b = c; ...
unit Unit1; intece const c = 1; ...
在这个例子中,Prog直接引用单元Unit2,Unit1。因为Unit1没出现在Prog的uses子句中,在要编译一个客户模块,编译器需要定位客户模块所引用的所有单元,不管是直接的还是间接的。但是,除非这些单元的源文件发生了改变,否则,编译器只需要它们的文件(Linux),而不是它们的源文件(.pas)。 当一个单元的接口部分被修改时,引用它的其它单元必须被重新编译;但若只修改了单元的实现部分或其它部分,引用它的单元没必要重新编译。编译器自动跟踪依赖关系,只有在需要时才重新编译单元。
Circular unit references(循环单元引用)当单元间直接或间接地互相依赖(或引用)只要在接口部分的uses子句中不出现循环引用路径。换句话说,从一个单元的接口部分开始,沿着它所依赖的其它单元的接口部分的依赖路径,一定不能重新返回到这个单元。解决相互依赖问题的一种模式就是,每个循环引用必须至少有一个uses子句出现在实现部分。- 14 -
A的uses子句中不必包含又直接引用单元Unit1B;若单元B引用单元C的标志符,则C,但编译器为了处理A,Unit1,因此,Prog间接引用Prog是不可见的。 .dcu 文件(Windows)或 .dcu/.dpu 相互依赖是被允许的,
Unit2单元声明的标志符对
时,我们称这些单元为相互依赖。
Programs and units
在两个单元相互依赖这种最简单的情况下,你不能在它们的接口部分的uses子句中互相列出对方。所以,下面的例子将产生编译错误:
unit Unit1;
intece
uses Unit2;
...
unit Unit2;
intece
uses Unit1;
...
但是,若把其中的一个引用移到实现部分,这两个单元之间的相互引用将是合法的:
unit Unit1;
intece
uses Unit2;
...
unit Unit2;
intece
...
implementation
uses Unit1;
...
为了减少出现循环单元引用的机会,
个单元的标志符必须在接口部分使用时,才需要在接口部分的uses子句中引用单元。uses子句中引用它。 只有当来自另一
- 15 - 要尽可能在实现部分的
Syntactic elements
Syntactic elements(语法元素)
Syntactic elements: Overview(概述)
Object Pascal使用ASCII字符集,包括A到Z、a到z、0到9、以及其它标准字符,字母是大小写无关的。空格(#32)和控制符(#0到#31,其中#13叫回车符或行的结束符)被称为空白符(blank)。
基本语法元素被称为token(如何翻译?),它们组合起来构成表达式、声明和命令语句。命令语句描述算法行为,它是可执行的;表达式是一个语法单元,它出现在命令语句中并表示一个值;声明定义一个标志符(比如函数或变量的名称),可以用在表达式或命令语句中,并在适当的地方为标志符分配内存。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-9.html
>得道多助
王健林说得还是比较现实