2016-05-17 35 views
3

Ich bin verwirrt zwischen verschiedenen Syntax für Funktionen in Fortran.Korrekte Fortran Funktion Syntax

function func(i) result(j) 
... 
end function fun 

ist hier zweites Beispiel

real function func (x) 
... 
end function func 

Dies ist drittes Beispiel

real function func (x) 
    ... 
    return 
    end function func 

Welche entsprechende Syntax wie pro modernem Fortran Standard ist? Und wenn ich im zweiten und dritten Beispiel mehrere Variablen im Programm vom Typ real deklariere, woher weiß der Compiler, welche Variable zurückgegeben werden soll?

+1

@HighPerformanceMark Ich stimme zu - während es verwandt ist, ist dies kein Duplikat (zumindest davon) – OMGtechy

Antwort

4

Alle Ihre Beispiele sind angemessen, abhängig von den Umständen. Aspekte davon sind auf Stilpräferenzen zurückzuführen.

Wenn die opening function-Anweisung keinen RESULT-Bezeichner hat, hat das Funktionsergebnis innerhalb des body der Funktion denselben Namen wie die Funktion.

Sie können den RESULT-Bezeichner in der öffnenden Funktionsanweisung wie im ersten Beispiel verwenden, um den Namen des Funktionsergebnisses in einen anderen Namen zu ändern.

Sie können dies tun, weil Sie lieber einen Namen für das Funktionsergebnis als den Funktionsnamen verwenden möchten. Möglicherweise müssen Sie dies tun, wenn Sie die Funktion rekursiv aufrufen möchten.

Sie können entweder den Typ der Funktion in der Eröffnungsanweisung angeben (gemäß Ihrem zweiten oder dritten Beispiel), oder Sie können den Typ der Funktion im Spezifikationsteil (im Rumpf) der Funktion selbst angeben (was vermutlich in Ihrem ersten Beispiel passiert, implizites Tippen nebenbei). Attribute des Funktionsergebnisses müssen im body angegeben werden, so dass manche Leute es vorziehen, alles im Funktionskörper zusammen zu halten (dies vermeidet auch einige obskure Komplikationen im Zusammenhang mit dem Umfang und der Reihenfolge der Definitionen). Sie sollten niemals implizite Typisierung verwenden.

Ihr letztes Beispiel hat einfach eine explizite Rückgabeanweisung am Ende des ausführbaren Teils der Funktion. Dies ist überflüssig - die Funktion kehrt automatisch zurück, wenn die Ausführung das Ende des ausführbaren Teils der Funktion erreicht. Manche Leute bevorzugen die explizite return, vielleicht weil sie eine tief sitzende Angst haben, dass der Compiler plötzlich vergessen könnte, automatisch zurückzukehren, andere denken, dass dies absurde Dummheit ist.

Repeating - Der Name des Funktionsergebnisses ist der Funktionsname, wenn in der öffnenden Funktionsanweisung keine RESULT-Klausel vorhanden ist, andernfalls ist dies der Name in der result-Klausel.

Verwandte Themen