2013-08-26 52 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来自不测试存在的参数? – 2013-08-27 06:21:32

+1

也许你应该发布一个最小(不)工作示例... – Stefan

回答

4

确定我发现了这个问题,我使用的变量,即使不存在,这样的:

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节。 – 2013-08-27 13:33:42

+0

好吧我不受欢迎,谢谢@arbautjc – rosilho

+0

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