6

Fortran のオプションの引数は と のサブルーチンで使用できますintent(in)intent(inout)、関数のオプションの引数は でしか機能しintent(in)ませんよね? intent(inout)次のコードでセグメンテーション違反が発生します。

real function foo(x, tol) 
    real, intent(in) :: x
    real, optional, intent(inout) :: tol
    if( .not. present(tol) ) tol = 1e-6
    !...
end function foo
4

1 に答える 1

5

私は問題を発見しました.4行目(tol = 1e-6)に存在しない場合でも変数を使用しました:

real function foo(x, tol) 
    real, intent(in) :: x
    real, optional, intent(inout) :: tol
    if( .not. present(tol) ) tol = 1e-6
    !...
end function foo 

しかし、C ++でそのようなことをするときのように、存在しない場合でもそれを使用してデフォルト値を設定したいと思います

double foo(double x, double tol=1e-6)

残念ながら、Fortran ではできないようです。

于 2013-08-27T12:15:56.550 に答える