2013-08-26 15 views
5

私はFortranを学習していますが、現時点ではオプションの引数です。Fortran関数のオプションの引数

intent(in)intent(inout)のサブルーチンで使用できますが、オプションの引数はintent(in)でしか機能しません。 intent(inout)では、私はセグメンテーションフォルトを得る。私は問題を発見

+2

inoutはここを参照してください。http://stackoverflow.com/questions/3121954/fortran-90-presence-of-optional-arguments – agentp

+1

おそらくsegfaultは引数の有無をテストしていないのでしょうか? –

+1

おそらく最小の(そうでない)実例を投稿するべきです... – Stefan

答えて

4

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) 

どうすればいいですか?ありがとう

+2

存在しないオプションの引数を定義/割り当て/使用することはできません。別の変数を使用する必要があります。たとえば、オプションの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項を参照してください。 –

+0

ok私はundestood、ありがとう@arbautjc – rosilho

+0

http://stackoverflow.com/questions/18302083/fortran-95-present-statement-using-ftn95-and-plato – agentp

関連する問題