2013-08-26 50 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