2017-02-19 29 views
0

Ich habe die folgende FunktionSo rufen Sie eine externe Funktion auf?

REAL FUNCTION myfunction(x) 

    IMPLICIT NONE 
    REAL, INTENT(IN) :: x 
    myfunction = SIN(x) 

END FUNCTION myfunction 

in einer Datei myfunction.f90

ich verwenden möchte, diese Funktion in anderer f90-Datei bezeichnet. Wie kann ich das machen?

Antwort

1

Der empfohlene Weg, dies in modernen Fortran zu tun wäre, ein Modul zu erstellen, nennen wir es z. "Mein Mathe".

module mymath 
contains 
    function myfunction(x) result(r) 
    real, intent(in) :: x 
    real    :: r 

    r = sin(x) 
    end function 
end module 

Dann eine andere Datei main.f90 wie folgt aus: In diesem Fall können Sie eine Datei mymath.f90 enthält so etwas wie dieses schaffen

program main 
    use :: mymath 

    print *,myfunction(3.1416/2) 
end program 

Dann kompilieren Sie nur die Quelldateien zusammen:

gfortran mymath.f90 main.f90 

Die resultierende ausführbare Datei sollte wie erwartet funktionieren.

EDIT:

Wenn Sie wirklich weg von Modulen bleiben möchten, dann können Sie mymath.f wie diese machen:

function myfunction(x) result(r) 
    real, intent(in) :: x 
    real    :: r 

    r = sin(x) 
end function 

Und machen main.f90 wie folgt aus:

program main 
    real, external :: myfunction 

    print *,myfunction(3.1416/2) 
end program 

Es kompiliert und funktioniert wie die andere Lösung. Wenn Sie external anstelle von module verwenden, wird der Compiler normalerweise nicht überprüfen, dass die Argumente, die Sie an myfunction übergeben, über die richtige Anzahl, Typen und Dimensionen verfügen, was das Debuggen in der Zukunft komplizieren kann.

+0

Danke, ich werde warten, wenn jemand einen einfachen Weg aufzeigt, die Funktion ohne die Modulumgebung aufzurufen. –

+2

Obwohl vielleicht gute Praxis, ist das "externe" hier nicht erforderlich. – francescalus

1

Gerade externe Verwendung ...

... 
REAL, EXTERNAL :: myfunction 
REAL   :: X, Y 
... 

Y = myfunction(x) 

Das heißt, es ist klüger, der Compiler tun zu lassen, was sie tut und die offensichtlichen Probleme zu fangen, die leicht zu übersehen sind ... so hat jabirali einen guten Ansatz .

Verwandte Themen