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.