Prozeduraufruf


Der Aufruf einer Prozedur ist eine Anweisung der Gestalt
<Prozedurname> <Argumentliste>
die sich durch die folgenden Regeln beschreiben läßt:
<Prozedurname> <Bezeichner>
<Argumentliste> ( <Argumente> )
<Argumentliste> <leer>
Die Argumentliste kann also fehlen.
<Argumente> <Argumente> , <Argument>
<Argumente> <Argument>
Die Argumente werden also durch Kommas getrennt.
<Argument> <Ausdruck>
Dies ist ein Wert-Argument; der Ausdruck wird ausgewertet, und das Ergebnis wird der Prozedur übergeben.
<Argument> <Variable>
Dies ist ein Referenz-Argument; die Variable bezeichnet ein Objekt, das die Prozedur ansprechen und auch verändern können soll.

Wert-Argumente und Referenz-Argumente sind in Modula 2 an der Aufrufstelle der Prozedur oft nicht zu unterscheiden; der Unterschied zeigt sich in der Form der Prozedur-Vereinbarung, und natürlich gehört er zum Kontrakt.

Ein Funktionsaufruf sieht (fast) genauso wie ein Prozeduraufruf aus, doch steht er an einer anderen Stelle: nicht als Anweisung,  sondern als Ausdruck,  oder als Operand  eines Ausdrucks, da er ja einen Ergebniswert  zurückliefert. Hier sollten  nur Wert-Argumente verwendet werden, und bei (selten vorkommenden) parameterlosen Funktionen muß in Modula 2 merkwürdigerweise dennoch eine leere Parameter-Klammer geschrieben werden. (Die in der Sprache C gegebene Möglichkeit, einen Funktionsaufruf auch als Anweisung zu verwenden und den Ergebniswert "wegzuwerfen", ist logisch unsauber und fehleranfällig).

Andere Programmiersprachen bieten gelegentlich noch weitere "Parameter-Übergabemechanismen" wie "call by value/result" oder "call by name" an; wir gehen darauf hier nicht ein.


zurück | Inhalt | Index | vor | Vorlesung

Klaus Lagally, 22. Februar 2000, 19:36