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:
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.