6

我可以将 Fortran 可选参数与带有intent(in)and的子例程一起使用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

我发现了问题,即使在第四行(in 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 回答