Definition: subroutine Name( Variablenliste)
Aufruf: call Name( Variablenliste)
subroutine Demo(var1,var2)
integer var1
double precision var2
write(6,*) ``irgendwas``
return
end
Funktionen:
Definition:
Typbezeichnung function Name( Variablenliste)
oder
function Name( Variablenliste)
Typbezeichnung Name
Der Name wird innerhalb der Funktion wie eine Variable behandelt,
der ein Wert zugewiesen werden kann. Dieser Wert dient als Rückgabewert
der Funktion.
Funktions- oder Prozedurnamen können als Parameter einer anderen
Funktion übergeben werden. Innerhalb des aufrufenden Programms muß dieser
Name als external für selbstdefinierte oder als intrinsic
für intrinsische Funktionen deklariert werden.
program demo
intrinsic sin,cos
write (6,*) ableit(sin,0.0),ableit(cos,0.0)
end
function ableit(funk,x)
real x,ableit,h
h = 1.0e-6
ableit = (funk(x+h)-funk(x))/h
return
end
entry -Anweisung, definiert weitere Einsprung-Adressen
innerhalb von Unterprogrammen. Die Parameter des Unterprogramms müssen
mit denen des entry -Befehls identisch sein.
Der Aufruf eines entry erfolgt
analog zum Aufruf des Unterprogrammes selbst.
subroutine demo(var)
real var
entry einsprung(var)
end
call demo(1.0)
call einsprung(2.5)
save -Anweisung, bewirkt die Speicherung aller lokalen
Variableninhalte in einem Unterprogramm. Beim nächsten Aufruf
des Unterprogrammes besitzen alle Variablen denselben Wert wie beim
Verlassen der Routine nach dem vorangehenden Aufruf.
Auch ohne save bleiben aufgrund der statischen
Speicherverwaltung
die Variableninhalte erhalten außer, es müssen während
der Programmausführung Teile des Programms aus Speicherplatzgründen
ausgelagert werden. save stellt die Erhaltung der Variableninhalte
sicher.
Die Verwendung von save ist schlechter Programmierstil
und einer Hochsprache unangemessen. Grundsätzlich sollten alle
lokalen Variablen bei jedem Aufruf des Unterprogramms neu definiert werden
(darum werden sie lokal genannt).
blockdata -Unterprogramme, Initialisierung von common -Blöcken.
Wird zu Beginn der Programmausführung genau einmal automatisch
aufgerufen.
Ein expliziter Aufruf des blockdata -Unterprogramms ist nicht
möglich.
In blockdata -Unterprogrammen dürfen keine ausführbaren
Anweisungen stehen. Lediglich data -Anweisungen und Variablen- und
common -Block-Deklarationen sind erlaubt.
real x(10),y(5),z
common /daten/x,y,z
integer i
write(6,*) (x(i),i=1,10),(y(i),i=1,5),z
end
blockdata init
real x(10),y(5),z
common /daten/x,y,z
data x/1,2,3,4,5,6,7,8,9,10/
data y/1,2,3,4,5/, z/42/
end