Fortranモジュールで循環依存性がどのように正確に解決されたかわかりません。以下のモジュールはFortranモジュールの型間の循環依存性
module types
implicit none
type type1
type(type2), pointer :: t2
end type type1
type type2
type(type1) :: t1
integer :: x
end type type2
end module
のifort-2016とのgfortran-4.9でコンパイルが、私は
module types
implicit none
type type2
type(type1) :: t1
integer :: x
end type type2
type type1
type(type2), pointer :: t2
end type type1
end module
に定義の順序を変更する場合、私は次のようなエラー
error #6457: This derived type name has not been declared. [TYPE1]
type(type1) :: t1
は行動がある取得しますifort-2016およびgfortran-4.9と同じです。 両方のモジュールで同様の循環依存関係が存在するので、最初のコンパイルはなぜコンパイルされますが、2番目のコンパイルはなぜですか?
多くのコンパイラは、C440でALLOCATABLE、POINTERのみの例外を実装していません。 –
良い点。私は(間違って) 'allocatable'はF2008では再帰的定義のためだけに新しくなったと考えてきましたが、これは"以前に定義された "の具体例です。 F2003では、このような場合には一般的に「ポインタ」しか許されていなかった。 – francescalus