PACKEDkann im Zusammenhang mit strukturierten Datentypen verwendet werden.
Der Sprachstandard überläßt es den jeweiligen Pascal-Systemen,
ob bzw. wie sie Daten packen. Hier kann es von System zu System wesentliche
Unterschiede geben, die jedoch für die Programmlogik nicht relevant
sind.
Bei einer Reihe von Systemen beeinflußt PACKED die interne
Ablage der Daten nicht.
Ob dies nun bedeutet, daß immer gepackt oder immer ungepackt oder
irgendein Kompromißverfahren angewendet wird, muß der jeweiligen
Systembeschreibung entnommen werden.
Beispiel:
VAR b : PACKED ARRAY[1..1000, 1..1000] OF BOOLEAN;Als Werte vom Typ BOOLEAN kommen nur TRUE und FALSE in Frage, zu deren Unterscheidung ein einziges Bit genügt. Typisch ist jedoch die Zuordnung von mindestens einem Byte (meist 2 oder 4 Byte) zu einer Variable vom Typ BOOLEAN.
Turbo Pascal, Delphi
PACKED hat auf den erzeugten Code keine Auswirkung: Es erfolgt immer eine kompakte Abspeicherung.
Prozeduren zum Packen bzw. Entpacken
Packen
Pack(VAR u: ARRAY[indextyp1] OF typ;
i: indextyp1;
VAR p: PACKKED ARRAY[indextyp2] OF typ);
Beginnend mit der i-ten Komponente werden die Komponenten des Arrays
u in das Array p kopiert und dabei gepackt. Entpacken
Unpack(VAR p: PACKKED ARRAY[indextyp1] OF typ;
VAR u: ARRAY[indextyp2] OF typ;
i: indextyp2);
Beginnend mit der i-ten Komponente werden die Komponenten des Arrays
p in das Array u kopiert und dabei entpackt.
Systeme, bei denen PACKED ohne Auswirkung auf den generierten
Programmcode bleibt, verzichten mitunter darauf, die Unterprogramme
Pack und Unpack anzubieten.
Andere Systeme stellen die Unterprogramme aus Portabilitätsgründen
zur Verfügung, ihr Aufruf bleibt jedoch ohne Folgen.
Turbo Pascal, Delphi
Die Prozeduren Pack und Unpack stehen nicht zur
Verfügung.
Laut Sprachbeschreibung wird automatisch immer gepackt.
Bemerkung:
Im Zusammenhang mit ARRAY[...] OF CHAR kommt dem Schlüsselwort
PACKED eine spezielle Bedeutung zu:
Beispiel:
VAR s1 : ARRAY[1..4] OF CHAR;
s2 : PACKED ARRAY[1..4] OF CHAR;
s1[1] := 'T'; s2[2] := 'e'; s3[3] := 'x'; s4[4] := 't';
s2 := 'Text';
Während bei dem "normalen" Array s1 eine Wertzuweisung nur
komponentenweise, d.h. hier zeichenweise, erfolgen darf, kann dem gepackten
Array s2 ein Zeichenketten-Literal zugewiesen werden.