2013-08-26 14 views
5

Sto imparando Fortran, in questo momento argomenti opzionali.argomenti opzionali nelle funzioni fortran

io possa usare con subroutine con intent(in) e intent(inout), ma con funzioni di argomenti opzionali lavorare solo con intent(in), giusto? Con intent(inout) ricevo errori di segmentazione.

+2

inout dovrebbe funzionare qui http://stackoverflow.com/questions/3121954/fortran-90-presence-of-optional-arguments – agentp

+1

Forse il segfault deriva dal non testare per la presenza dell'argomento? –

+1

Forse dovresti pubblicare un esempio di lavoro minimo (non) ... – Stefan

risposta

4

ok ho trovato il problema, ho usato la variabile anche quando non è presente, come quella:

real function foo(x, tol) 
    real, intent(in) :: x 
    real, optional, intent(inout) :: tol 
    if(.not. present(tol)) tol = 1e-6 
    !... 
end function foo 

Ma vorrei usarlo anche quando non è presente e impostare un valore predefinito, come quando in C++ facciamo qualcosa del genere

double foo(double x, double tol=1e-6) 

Come posso fare? grazie

+2

Non puoi definire/assegnare/usare un argomento facoltativo che non è presente. Devi usare un'altra variabile. Ad esempio, nominare facoltativo var * opt_tol * e definire * tol * nel programma (* se presente (opt_tol) quindi tol = opt_tol else tol = valore predefinito *). Vedere la sezione 12.4.1.6 dello [standard di Fortran 2003] (http://www.j3-fortran.org/doc/year/04/04-007.pdf). –

+0

ok I undestood, grazie @arbautjc – rosilho

+0

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

Problemi correlati