Ist das Präsenz-Attribut auf Komponenten abgeleiteter Datenstrukturen "geerbt"? Der Standard sagt, ein Dummy-Argument ist nicht vorhanden, wenn das entsprechende tatsächliche Argument nicht vorhanden ist. Aber ich bin nicht sicher, wie dies zu Komponenten von abgeleiteten Datentypen gilt, wie im folgende Beispiel:Vorhandensein optionaler abgeleiteter Datentyp-Komponenten
program test
implicit none
type some_type
integer :: acomponent
end type some_type
type(some_type) :: testval
testval%acomponent = 42
call outer()
call outer(testval)
contains
subroutine outer(me)
type(some_type), optional :: me
call inner(me%acomponent)
end subroutine outer
subroutine inner(simple)
integer, optional :: simple
if (present(simple)) then
write(*,*) 'simple present:', simple
else
write(*,*) 'simple not present...'
end if
end subroutine inner
end program test
Das obige Beispiel kompiliert und läuft gut mit gfortran-5, aber ist es Standard konforme? Irgendwie kann ich es nicht herausfinden, indem ich auf den Standard schaue.
Da Sie gfortran verwenden, können Sie nicht standardmäßige Fortran mit dem Compiler-Flag '-std = f2008ts' deaktivieren. Dies ermöglicht den Fortran-Standard 2008 einschließlich der Ergänzungen der Technischen Spezifikation (TS) 29113 zur weiteren Interoperabilität von Fortran mit C und TS 18508 zu zusätzlichen parallelen Merkmalen in Fortran. – jlokimlin
@jlokimlin danke. Allerdings kompiliert der Code auch mit diesem Flag, zumindest mit der Installation von gfortran 5.4, die ich hier habe. Ich verwende tatsächlich -std = f2008 im ursprünglichen Code, obwohl ich zugeben muss, dass ich diesen kleinen Beispielcode mit der Markierung bis jetzt nicht überprüft habe. – haraldkl