Ob das eine oder das andere zu verwenden ist mehr oder weniger eine Frage des Programmierstils. Sie dürfen die Argumente von Funktionen und Unterprogrammen als intent(in)
, intent(inout)
oder intent(out)
schreiben.
Mein persönlicher Stil ist jedoch nur die intent(in)
Argumente für Funktionen zu verwenden, die auch eine Voraussetzung für pure
Funktionen ist. Eine Ausnahme von dieser Regel kann gemacht werden, wenn ein Fehlercode intent(out)
Argument erforderlich ist.
Es gibt eine subtile Falle, die in Funktionen versteckt ist und unterschiedliche Ergebnisse für denselben Eingabeargumentwert liefert. Betrachten wir eine hypothetische Funktion
real function rnd()
end function
es einmal eine Zufallszahl Rückkehr Aufruf
x = rnd()
ist völlig in Ordnung. In einem Ausdruck mehrfach aufrufen
kann dazu führen, dass die Funktion nur einmal aufgerufen wird. Fortran-Sprachregeln erlauben ein solches Verhalten. Daher ist das Standard-Fortran-Verfahren zum Erhalten von Zufallszahlen random_number()
eine Subroutine (und da alle intrinsischen Funktionen pure
sind).
Wo immer Sie eine Funktion nicht verwenden können, verwenden Sie ein Unterprogramm.
Jede Funktion kann in ein Unterprogramm konvertiert werden, indem die Ergebnisvariable in ein Dummy-Argument mit intent(out)
verschoben wird. Der umgekehrte Prozess könnte problematischer sein.
Der größte Unterschied besteht darin, dass Subroutinen über die 'CALL'-Anweisung aufgerufen werden und daher nicht Teil eines Ausdrucks sein können. –