私はFortranを学習していますが、現時点ではオプションの引数です。Fortran関数のオプションの引数
intent(in)
とintent(inout)
のサブルーチンで使用できますが、オプションの引数はintent(in)
でしか機能しません。 intent(inout)
では、私はセグメンテーションフォルトを得る。私は問題を発見
私はFortranを学習していますが、現時点ではオプションの引数です。Fortran関数のオプションの引数
intent(in)
とintent(inout)
のサブルーチンで使用できますが、オプションの引数はintent(in)
でしか機能しません。 intent(inout)
では、私はセグメンテーションフォルトを得る。私は問題を発見
OK、私はそのようにも存在していない変数、使用:
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)
どうすればいいですか?ありがとう
存在しないオプションの引数を定義/割り当て/使用することはできません。別の変数を使用する必要があります。たとえば、オプションのvar * opt_tol *に名前をつけ、プログラム内に* tol *を定義します(存在する場合は(opt_tol)、次にtol = opt_tol else tol =デフォルト値*)。 [Fortran 2003標準](http://www.j3-fortran.org/doc/year/04/04-007.pdf)の12.4.1.6項を参照してください。 –
ok私はundestood、ありがとう@arbautjc – rosilho
http://stackoverflow.com/questions/18302083/fortran-95-present-statement-using-ftn95-and-plato – agentp
inoutはここを参照してください。http://stackoverflow.com/questions/3121954/fortran-90-presence-of-optional-arguments – agentp
おそらくsegfaultは引数の有無をテストしていないのでしょうか? –
おそらく最小の(そうでない)実例を投稿するべきです... – Stefan