Programmiersprache Pascal
Parameterübergabe an Unterprogramme
Parameterlisten enthalten Aufzählungen der Gestalt
io parameter_1 : datentyp_1; ...; io parameter_n : datentyp_n
io legt die Art der Parameterübergabe fest.
Es gibt folgende Möglichkeiten:
-
Wertparameter (value parameter)
io wird ausgelassen.
Das Unterprogramm bekommt von der aufrufenden Programmeinheit einen
Wert übergeben. Es wird typischerweise mit einer Kopie arbeiten.
Es kann vom jeweiligen Pascal-System abhängen, ob das Unterprogramm
den Wert des Wertparameters - intern - verändern darf. Dies betrifft
dann die Kopie.
In der aufrufenden Programmeinheit bleibt der Wert des Wertparameters
unverändert.
Wertparameter werden vorzugsweise als Eingabeparameter eingesetzt.
-
Variablenparameter (variable parameter)
VAR ist für io einzusetzen.
Das Unterprogramm bekommt von der aufrufenden Programmeinheit eine
Adresse übergeben. Es wird typischerweise nicht mit einer Kopie,
sondern mit dem Orginalspeicherbereich arbeiten.
Das Unterprogramm in dem adressierten Speicherbereich lesen und schreiben.
Variablenparameter werden vorzugsweise als Ausgabeparameter eingesetzt.
-
Schreibgeschützte Parameter (protected parameter)
Sind in Standard Pascal nicht vorgesehen.
Für io kann angegeben werden
-
PROTECTED
in Extended Pascal
-
CONST
in Delphi
Das Unterprogramm bekommt von der aufrufenden Programmeinheit wie beim
Variablenparameter eine Adresse übergeben. Es darf in dem adressierten
Speicherbereich jedoch nur lesen, nicht aber schreiben.
Schreibgeschützte Parameter sind vorteilhaft, wenn große
Datenmengen, z.B. in Gestalt von Arrays oder Records an ein Unterprogramm
übergeben werden sollen. Wertparameter sichern, daß die
Orginaldaten erhalten bleiben, belasten aber durch das Anlegen einer Kopie
den Speicher. Variablenparameter sparen Speicherplatz, bieten jedoch
keinen Schutz vor versehentlichen Veränderungen der Daten.
Schreibgeschützte Parameter verbinden in dieser Situation die
Vorteile von Wert- und Variablenparametern.
Hinweis:
Ein fehlendes VAR im Prozedurkopf bei Ausgabegrößen ist
bei einer Reihe von Pascal-Systemen nicht selten Ursache von Fehlern:
Innerhalb der Prozedur wird der gewünschte Wert zwar berechnet, jedoch
nicht an die aufrufende Programmeinheit übergeben.
Beispiel:
PROCEDURE add(x, y, z: INTEGER);
BEGIN
z := x + y;
END;
Turbo Pascal z.B. wird die Summe berechnen, den berechneten Wert jedoch nicht
an die aufrufende Programmeinheit zurückliefern.
Korrekt wäre
PROCEDURE add(x, y: INTEGER; VAR z: INTEGER);
Denkbar wäre, daß ein "wachsamer" Compiler die Veränderung
eines Wertparameters verbietet oder zumindestens mittels einer Warnung
darauf aufmerksam macht.
P. Böhme, 12.08.1996