私は他のF90ファイルでこの機能を使用したいmyfunction.f90
外部関数を呼び出す方法は?
と呼ばれるファイルに次の関数
REAL FUNCTION myfunction(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
myfunction = SIN(x)
END FUNCTION myfunction
を持っています。これどうやってするの?
私は他のF90ファイルでこの機能を使用したいmyfunction.f90
外部関数を呼び出す方法は?
と呼ばれるファイルに次の関数
REAL FUNCTION myfunction(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
myfunction = SIN(x)
END FUNCTION myfunction
を持っています。これどうやってするの?
モダンな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
に与えた引数が適切な数、型、およびディメンションを持つことを確認しません。
ただ、外部使用して... ...コンパイラは、それが何を行うには、欠場しやすい明確な問題をキャッチできるようにする方が賢明であるのでjabiraliが良いアプローチを持っている、と述べた
...
REAL, EXTERNAL :: myfunction
REAL :: X, Y
...
Y = myfunction(x)
。
ありがとう、私は誰かがモジュール環境なしで関数を呼び出す簡単な方法を指摘するのを待つでしょう。 –
おそらく良い例ですが、ここでは「外部」は必要ありません。 – francescalus