Fortranでも構造体が使えるらしいです。素敵です。変数が増えすぎると氏ねるので、とても良いと思います。でもCのように構造体へのポインタとかいう使い方はおっかないのでできないです。
まあでもFortranの場合はサブルーチンにぶち込んでしまえば問題ないので、まあ良いのかも。
んで、ソースを複数に分割してるのだけど、
module struct_def type hoge double precision :: A, B, C integer :: i, j, k end type hoge type (hoge) :: fuga end module struct_def module SubProgram implicit none contains subroutine piyo (fuga) use struct_def implicit none type (hoge), intent (in) :: fuga write (*,99) fuga % A, fuga % i 99 format (I2.2, 2x, E15.5) return end subroutine piyo end module SubProgram program hogera use struct_def use SubProgram implicit none fuga % A = 1.0 fuga % i = 1 call piyo (fuga) end program hogera
みたいな感じ。
構造体の定義は、typeを使って、
type hoge double precision :: A, B, C integer :: i, j end type hoge
とか、そんな感じ。C言語でいうところの一種のtypedefみたいな感じなんだろうか。
そして、宣言は、
type (hoge) :: fuga
で、hogeみたいな構造を持った構造体fugaが定義される。これをプログラムの中で書くと、
program test implicit none type hoge double precision :: A, B, C integer :: i, j end type hoge type (hoge) :: fuga ... end program test
みたいな感じ。
代入とか、その辺の話は、%を使えばおk。この辺はC言語みたいに、値を参照するには.で、アドレスは->とか、そういうのはあるのかないのか良く分からない。というか、Fortranでポインタとか、使わないし。
fuga % A = 1.0
とかする。
なので、まとめると、
program test implicit none type hoge double precision :: A, B, C integer :: i, j end type hoge type (hoge) :: fuga fuga % A = 1.0 fuga % i = 1 write (*,99) fuga % i, fuga % A 99 format (I2.2, 2x, E15.5) end program test
みたいな感じ。あとはまあサブルーチンへの代入とか、関数への代入はC言語と同じ感じでやれます。