Fortran には共通ブロックに共通ブロックがありますか? 構造体の中に構造体があるように。例えば
integer int 1, int2
common/Common1/int1, int2
float f1, f2
common/Common2/f1, f2
save/Common2/, /Common1/
上記のコードは、common1 内にある common2 を意味しますか?
Fortran には共通ブロックに共通ブロックがありますか? 構造体の中に構造体があるように。例えば
integer int 1, int2
common/Common1/int1, int2
float f1, f2
common/Common2/f1, f2
save/Common2/, /Common1/
上記のコードは、common1 内にある common2 を意味しますか?
いいえ、あなたが書いたコードは無効です。共通ブロックは、単なる名前付きのメモリ領域です。
Fortran には、C 構造体に非常によく似た「派生データ型」があります。Fortran の派生型宣言は次のようになります。
type float_struct
real :: f1, f2
end type
これで、この型の変数を含む別の派生型を宣言できます。
type my_struct
integer :: int1, int2
type (float_struct) :: my_float_struct
end type
これらは型の宣言であり、その型の変数のインスタンス化ではないことに注意してください。サブルーチン、関数、またはプログラムで宣言にアクセスできるように、宣言をモジュールに入れるのが最善です。たとえば、上記の宣言が「my_structs_mod」という名前のモジュールに配置されているとします。次に、次のように使用できます。
subroutine sub()
use my_structs_mod
type (my_struct) :: ms
ms%int1 = 42
...
end subroutine
パーセント記号 (%) は、C のドット (.) 演算子に似ていることに注意してください。これにより、派生型に含まれるデータにアクセスできます。