派生データ構造のコンポーネントにプレゼンス属性が継承されていますか?標準によれば、対応する実引数が存在しない場合、仮引数が存在しません。しかし、私は、これは次の例のように派生データ型のコンポーネントに適用され、どのように確認していない:オプションの派生データ型コンポーネントの存在
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
上記の例では、コンパイルとのgfortran-5で細かい動作しますが、それは標準に準拠しているのですか?どういうわけか、私は標準を見てそれを理解することはできません。
gfortranを使用しているので、非標準のFortranをコンパイラフラグ '-std = f2008ts'で無効にすることができます。これにより、FortranとCとのさらなる相互運用性に関する技術仕様書(TS)29113とFortranにおける追加並列機能に関するTS 18508の追加を含むFortran 2008標準が可能になります。 – jlokimlin
@jlokimlinありがとう。しかし、このコードは、少なくとも私がここにあるgfortran 5.4のインストールでも、そのフラグでコンパイルされます。私は実際には、元のコードで-std = f2008を使用していますが、私は今までこの小さなサンプルコードをフラグでチェックしなかったことを認めなければなりません。 – haraldkl