A program
contains
·a program heading,
·a uses clause (optional), and
·a block of declarations and statements.
The
program heading specifies a name for the program. The uses clause lists
units used by the program. The block contains declarations and statements that
are executed when the program runs. The IDE expects to find these three
elements in a single project (.dpr) file.
The
example below shows the project file for a program called Editor.
1 program Editor;
2
3 uses
4 Forms, {change to QForms in
Linux}
5 REAbout in
'REAbout.pas' {AboutBox},
6 REMain in 'REMain.pas' {MainForm};
7
8 {$R *.res}
9
10 begin
11
Application.Title := 'Text Editor';
12
Application.CreateForm(TMainForm, MainForm);
13
Application.Run;
14 end.
Line 1
contains the program heading. The uses clause is on lines 3 through 6.
Line 8 is a compiler directive that links the project’s resource file into the
program. Lines 10 through 14 contain the block of statements that are executed
when the program runs. Finally, the project file, like all source files, ends
with a period.
This is, in fact, a fairly typical project file. Project files are usually short, since most of a program’s logic resides in its unit files. Project files are generated and maintained automatically, and it is seldom necessary to edit them manually.
Program structure and syntax:
Overview
Unit structure and syntax: Overview
Unit references and
the uses clause
Multiple and indirect
unit references
Unit structure and syntax: Overview
Writing
dynamically loadable libraries
程序包括
·程序首部
·uses 子句(可选的)
·声明和语句块
程序首部指定了程序名。uses子句列出了程序用到的单元。当程序运行时,包含声明和语句的块是可以执行的。Borland集成开发环境对于每个单独的工程(.dpr)文件都将试图找到这三个基础部分。
下面给出的范例是一个名为Editor的工程文件。
1 program Editor;
2
3 uses
4 Forms, {在Linux中需要改成QForms}
5 REAbout in
'REAbout.pas' {AboutBox},
6 REMain in 'REMain.pas'
{MainForm};
7
8 {$R *.res}
9
10 begin
11
Application.Title := 'Text Editor';
12
Application.CreateForm(TMainForm, MainForm);
13
Application.Run;
14 end.
第1行是程序首部;第3行到第6行是uses子句;第8行是一个编译指示,用于将工程的资源文件(与工程文件具有相同的主文件名)连接到程序中;第10行到第14行是程序运行时将执行的语句块;最后是一个句点“.”。(所有的源文件,包括unit、package、library等,都以句点“.”结束。)
事实上,这是一个很典型的工程文件。工程文件通常很短,因此大部分程序逻辑驻留在单元文件中。工程文件由Borland集成开发环境自动产生并自动维护,开发者很少有必要对工程文件进行手工编辑。
编者注
关于“程序”
在本参考中,一般情况下“程序”是指区别于单元的工程文件(不是以unit作为源代码首部,而是以program、library、package等作为源代码首部),而且大多数时候是指保留字program出现在程序首部的工程或主程序。有些情况下是泛指,即程序的总称,如Overview主题目录下的Program organization(程序组织)。而在当前主题目录Programs and units(程序和单元)中,“程序”和“单元”是有区别的,前者指保留字program出现在模块首部的源代码文件,后者指保留字unit出现在模块首部的源代码文件。特别需要提出的是,在传统的Pascal编程中,所有的源代码都保存在以.pas作为扩展文件名的源代码文件,都叫做单元(unit),而以保留字program作为模块首部的单元又称为主程序,因此也可以理解为:主程序是特殊的单元。
关于注释
注释一般由开发者根据需要为源代码添加注解,以便今后维护。在本例中,除了一般意义上的注释之外,还有两类特殊的注释。
一类是由IDE自动添加和维护的注释,如本例中uses子句中的单元列表,在每个单元名后都用注释标明了相应的窗体名称。对于这一类注释,尽管删除它们也不会对编译和运行造成任何影响,但建议开发者还是不要对其进行手工编辑,毕竟这些注释反映了程序组织(对于自行定制的单元,IDE不会自动添加这类注释,因此可以根据注释的有无直接区分单元),同时也能很容易看出这些单元的窗体是在IDE中设计完成的。
另一类是编译指示,如本例中的第8行源代码“{$R *.res}”。对于编译指示,尽管以注释形式出现在源代码中,但它直接影响编译的结果和程序的完整与否。此外,编译指示还对格式有严格要求。例如,上面的第8行源代码如果写成“{ $R *.res}”,尽管可以编译通过,但编译得到的程序是无法正确运行的,因为此时该行代码已经不是编译指示,编译器视其为一般注释。如果将第8行源代码写成“{$ R *.res}”,则无法成功编译。
与传统Pascal编程一样,用于注释和/或编译指示的花括号“{” 和“}”,也可以分别用“(*”和“*)”代替。这一特性使得一般注释可以嵌套,特别对于要将大段的源代码注释掉(编写源代码的一种良好习惯,对于不确定是否需要保留的源代码,可以将其作为注释保留在源代码文件中,以备今后重新使用这些源代码)的情况。例如,需要注释掉的源代码中已经有若干注释(假定注释内容仅使用了“{”和“}”以及单行注释标识“//”),这时只要在源代码段的首尾加上“(*”和“*)”即可(如果直接加上“{”和“}”,一般情况下都不会达到预期效果,因为编译器不能正确将注释符配对)。这一特性对编译指示没有什么意义。
此外,Object Pascal还允许使用注释标识“//”进行简短注释,并且只能用于单行注释。例如,本例中的第4行可以写成“Forms, //在Linux中需要改成QForms”。