2017-02-19 14 views
0

私は他のF90ファイルでこの機能を使用したいmyfunction.f90外部関数を呼び出す方法は?

と呼ばれるファイルに次の関数

REAL FUNCTION myfunction(x) 

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

END FUNCTION myfunction 

を持っています。これどうやってするの?

答えて

1

モダンなFortranでこれを行うには、モジュールを作成することをお勧めします。 "mymath"そして、このような別のファイルmain.f90

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

    r = sin(x) 
    end function 
end module 

program main 
    use :: mymath 

    print *,myfunction(3.1416/2) 
end program 

次に、あなただけのソースファイルを一緒にコンパイルします

gfortran mymath.f90 main.f90 
その場合、あなたはこのような何かを含んだ一つのファイル mymath.f90を作成することができます

結果の実行可能ファイルは期待どおりに動作するはずです。

EDIT:

あなたが本当に離れモジュールから滞在することを好む場合、あなたはこのようなmymath.fを行うことができます。

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

    r = sin(x) 
end function 

そして、このようmain.f90を行います

program main 
    real, external :: myfunction 

    print *,myfunction(3.1416/2) 
end program 

それはコンパイルされ、他のソリューションと同じように機能します。 moduleの代わりにexternalを使用することを選択した場合、コンパイラは通常、myfunctionに与えた引数が適切な数、型、およびディメンションを持つことを確認しません。

+0

ありがとう、私は誰かがモジュール環境なしで関数を呼び出す簡単な方法を指摘するのを待つでしょう。 –

+2

おそらく良い例ですが、ここでは「外部」は必要ありません。 – francescalus

1

ただ、外部使用して... ...コンパイラは、それが何を行うには、欠場しやすい明確な問題をキャッチできるようにする方が賢明であるのでjabiraliが良いアプローチを持っている、と述べた

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

Y = myfunction(x) 

関連する問題