2013-08-26 24 views
5

Fortran'ı şu anda öğreniyorum, isteğe bağlı argümanlar.Fortran fonksiyonlarında isteğe bağlı argümanlar

intent(in) ve intent(inout) ile alt yordamlarla kullanabilirim, ancak isteğe bağlı bağımsız değişkenler yalnızca intent(in) ile çalışır, değil mi? intent(inout) ile segmentasyon hataları alıyorum. Ben sorun buldum

+2

inout burada çalışmalıdır http://stackoverflow.com/questions/3121954/fortran-90-presence-of-optional-arguments – agentp

+1

Belki de segfault argümanın varlığı için test edilmemesinden mi geliyor? –

+1

Belki de en az bir çalışma örneği göndermelisiniz ... – Stefan

cevap

4

Tamam, ben böyle bile bulunmayan değişken kullanıldı:

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

Ama ben bile kullandığınızda mevcut değil ve ne zaman C gibi varsayılan bir değer ayarlamak istiyoruz ++

Bunu nasıl yapabilirim? teşekkürler

+2

Mevcut olmayan isteğe bağlı bir bağımsız değişken tanımlayamaz/atamaz/kullanamazsınız. Başka bir değişken kullanmalısın. Örneğin, isteğe bağlı var * opt_tol * adını verin ve programınızdaki * tol * 'yu tanımlayın (eğer varsa (opt_tol) ve sonra tol = opt_tol else tol = varsayılan değer *). [Fortran 2003 standardının] 12.4.1.6 bölümüne bakın (http://www.j3-fortran.org/doc/year/04/04-007.pdf). –

+0

tamam anlaşılmamış, teşekkürler @arbautjc – rosilho

+0

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

İlgili konular