我正在学习Fortran,此时可选参数。Fortran函数中的可选参数
我可以使用它们的子程序intent(in)
和intent(inout)
,但功能可选参数只能用于intent(in)
,对吧?用intent(inout)
我得到分段错误。
我正在学习Fortran,此时可选参数。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
但我想即使使用它时,不存在和设置默认值,类似于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节。 – 2013-08-27 13:33:42
好吧我不受欢迎,谢谢@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来自不测试存在的参数? – 2013-08-27 06:21:32
也许你应该发布一个最小(不)工作示例... – Stefan