Die Reihenfolge der Units in der uses-Klausel bestimmt die Reihenfolge der Initialisierung dieser Units (siehe Der initialization-Abschnitt) und wirkt sich auf die Suche des Compilers nach den Bezeichnern aus. Wenn zwei Units eine Variable, eine Konstante, einen Typ, eine Prozedur oder eine Funktion mit identischem Namen deklarieren, verwendet der Compiler die Deklaration der in der uses-Klausel zuletzt angegeben
Unit. Wollen Sie auf den Bezeichner in einer anderen
Unit zugreifen, müssen Sie den vollständigen Bezeichnernamen angeben: Unitname.Bezeichner.
Eine uses-Klausel muß nur die Units enthalten, die direkt vom Programm bzw. von der
Unit verwendet werden, in dem bzw. der die uses-Klausel steht. Referenziert beispielsweise
Unit A Konstanten, Typen, Variablen, Prozeduren oder Funktionen, die in
Unit B deklariert sind, muß die
Unit B explizit in der uses-Klausel von
Unit A angegeben werden. Referenziert B wiederum Bezeichner aus
Unit C, ist
Unit A indirekt von
Unit C abhängig. In diesem Fall muß
Unit C nicht in einer uses-Klausel in
Unit A angegeben werden. Der Compiler benötigt jedoch Zugriff auf die Units B und C, während
Unit A verarbeitet wird.
Das folgende Beispiel illustriert diese indirekte Abhängigkeit:
Delphi-Quellcode:
program Prog;
uses Unit2;
const a = b;
...
unit Unit2;
interface
uses Unit1;
const b = c;
...
unit Unit1;
interface
const c = 1;
...
Hier hängt das Programm Prog direkt von Unit2 ab, die wiederum direkt von Unit1 abhängig ist. Prog ist also indirekt von Unit1 abhängig. Da Unit1 nicht in der uses-Klausel von Prog angeben ist, sind die in Unit1 deklarierten Bezeichner für Prog nicht verfügbar.
Damit ein Client-Modul compiliert werden kann, muß der Compiler Zugriff auf alle Units haben, von denen der Client direkt oder indirekt abhängt. Sofern der Quelltext dieser Units nicht geändert wurde, benötigt der Compiler nur die
DCU-Dateien, nicht jedoch die Quelltextdateien (
PAS).
Werden im interface-Abschnitt einer
Unit Änderungen vorgenommen, müssen die von dieser
Unit abhängigen Units neu compiliert werden. Werden die Änderungen dagegen nur im implementation- oder einem anderen Abschnitt einer
Unit vorgenommen, müssen die abhängigen Units nicht neu compiliert werden. Der Compiler überwacht diese Abhängigkeiten und nimmt Neucompilierungen nur vor, wenn dies erforderlich ist.