next up previous contents
Nächste Seite: FUNCTION Aufwärts: Fortran 90 Vorherige Seite: Format   Inhalt

Unterprogramme

Wenn man mit Unterprogrammen arbeitet, muß man zwischen Aktualparametern und Formalparametern unterscheiden:
Aktualparameter werden beim Aufruf eines Unterprogramms an das Unterprogramm übergeben, die Formalparameter stehen in der Kopfzeile des Unterprogramms.
Die Namen der Formalparameter sind lokale Namen und dürfen nicht in ALLOCATABLE-, DATA-, EQUIVALENCE-, INTRINSIC-, PARAMETER- und SAVE-Anweisungen auftreten.
Als Aktualparamter kommen in Frage: Für die Formalparameter gelten gewisse Regeln: Der Typ von Aktual- und Formalparameter muß i.a. übereinstimmen, ein skalarer Formalparameter vom Typ CHARACTER darf nicht länger sein als der ihm zugeordnete Aktualparameter. (Dies kann man aber leicht erreichen, indem man im Unterprogramm den Formalparameter mit der Längenspezifikation * definiert: CHARACTER (LEN=*) :: formalparameter)
Die Übergabe der Aktualparameter an die Formalparameter kann auf 2 Arten erfolgen: mittels Schlüsselwort (formalparametername = aktualparameter) oder einfach durch die übereinstimmende Reihenfolge der Aktual- mit der Formalparameterliste.
Ein Formalparameter kann zu einem Aktualparameter werden, wenn im Unterprogramm ein weiteres Unterprogramm aufgerufen wird, das in der Aktualparameterliste einen Formalparameter des aufrufenden Unterprogramms enthält.
SUBROUTINE sub1 (form_11, .., form_1n)     ! form_11 ist Formalparameter
 ...                                       !
 CALL sub2 (.., form_11, .., form_22=.., ) ! form_11 ist Aktualparameter
 ...                                       !
END SUBROUTINE sub1                        !
...                                        !
SUBROUTINE sub2 (.., form_21, form_22, ..) ! form_21 ist Formalparameter
 ...                                       !
END SUBROUTINE sub2                        !
Weiters gibt es die Möglichkeit Formalparameter mit dem Attribut OPTIONAL zu versehen (entweder bei Typdeklaration oder mit OPTIONAL - Anweisung), was bedeutet, daß dieser Parameter in der Aktualparameterliste nicht verwendet werden muß (Achtung bei Aufruf OHNE Schlüsselwort!). Ein weiteres Attribut für Formalparameter, das bei der Typdeklaration verwendet werden kann (und zur Programmsicherheit auch verwendet werden soll), ist das INTENT - Attribut, mit dem man festlegen kann, ob ein Formalparameter ein Eingabe- und/oder ein Ausgabeparameter ist:
INTENT(IN), INTENT(OUT) bzw. INTENT(INOUT)

Grundsätzlich gibt es drei Arten von Programmkomponenten: das bereits besprochene Hauptprogramm sowie Funktionen und Unterprogramme (und außerdem noch sogenannte MODULE, die allerdings keine ausführbaren Anweisungen enthalten und nur zur Definition gemeinsam nutzbarer Datenobjekte dienen), wobei die Funktionen und Unterprogramme sowohl extern als auch intern sein können.
Interne Unterprogramme, die mit CONTAINS am Ende des Anweisungsteils in eine Programmkomponente eingefügt werden, sind nur der Programmkomponente bekannt, in der sie stehen, externe Unterprogramme können von allen Programmkomponenten aus aufgerufen werden.
Unterprogramme werden verlassen, wenn der Anweisungsteil vollständig abgearbeitet wird oder wenn eine RETURN-Anweisung erreicht wird; man kehrt danach an die aufrufende Stelle zurück.
Mit dem Verlassen des Unterprogramms werden alle lokalen Variablen in diesem Unterprogramm undefiniert, außer man sichert sie alle (oder nur einzelne Variablen) durch eine SAVE-Anweisung (Syntax: SAVE [:: variablenliste]).
Eine STOP-Anweisung in einem Unterprogramm beendet auch das Hauptprogramm.


Unterabschnitte
next up previous contents
Nächste Seite: FUNCTION Aufwärts: Fortran 90 Vorherige Seite: Format   Inhalt
Reinfried O. Peter 2001-09-07