next up previous
Nächste Seite: Varianten-RECORDs Aufwärts: Unterschiede zu C-Schnittstellen Vorherige Seite: Aufzählungen und Mengen

Variablen-Parameter

Ein weiterer Vorteil vom gegenüber der Sprache C sind die Variablen-Parameter. C kennt ausschliesslich Werteparameter, d.h. die Prozedur kann den ihr übergebenen Wert nur lokal verändern. Soll der Inhalt eines Parameters in der Prozedur bleibend verändert werden, dann muss man einige Kunstgriffe anwenden. Was in so einfach aussieht:

MODULE m;

PROCEDURE P(i: INTEGER; VAR j:INTEGER);
BEGIN j:=2*i END P;

VAR
 k: INTEGER;
BEGIN
 P(2,k)
END m.

wird in C folgendermassen geschrieben:

void p(int i, int *j)
/* j wird als Zeiger auf int deklariert */
(*j)=2*i;

main()

  int k;

  p(2, &k);
  /* F"ur Parameter j muss Adresse "ubergeben werden */

Das bedeutet, dass man bei der Rückübersetzung aufpassen muss. Eine ,,wörtliche`` Übersetzung wird funktionieren, aber seine ,,C-Vergangenheit`` nicht verbergen können:

MODULE m;

FROM SYSTEM IMPORT ADR;

TYPE
  IntegerPtr = POINTER TO INTEGER;

PROCEDURE P(i: INTEGER; j:IntegerPtr);
BEGIN j^:=2*i END P;

VAR
 k: INTEGER;
BEGIN
 P(2,ADR(k))
END m.

Beispiele für eine elegante Übersetzung in findet man im Modul GraphicsL. Die Prozedur InitBitmap erwartet als ersten Parameter die Adresse einer BitMap. In ist dies ein VAR-Parameter des Typs BitMap. Die Übergabe mit Hilfe von VAR-Parametern wurde überall dort verwendet, wo es nicht nötig ist, einen Zeiger zu übergeben.



Claudio Nieder 2000-11-12