ずっとFortranは定数が使えないと思ってましたが、ありました。parameterを使うようです。
定数を使う前のプログラム。
takk@deb9:~$ cat do.f90
program main
do i=1,2
do j=1,3
write(*,*) 'i=',i,' / j=',j
end do
end do
stop
end
takk@deb9:~$ gfortran do.f90
takk@deb9:~$ ./a.out
i= 1 / j= 1
i= 1 / j= 2
i= 1 / j= 3
i= 2 / j= 1
i= 2 / j= 2
i= 2 / j= 3
takk@deb9:~$
上のプログラムを定数を使った形に変えてみます。
takk@deb9:~$ cat para.f90
program main
parameter (ifirst=1)
parameter (imax=2)
parameter (jfirst=1)
parameter (jmax=3)
do i=ifirst,imax
do j=jfirst,jmax
write(*,*) 'i=',i,' / j=',j
end do
end do
stop
end
takk@deb9:~$ gfortran para.f90
takk@deb9:~$ ./a.out
i= 1 / j= 1
i= 1 / j= 2
i= 1 / j= 3
i= 2 / j= 1
i= 2 / j= 2
i= 2 / j= 3
takk@deb9:~$
変数の代入を()で括って、paramterをつければ定数になるようですが、本当に定数なのでしょうか。代入文を追加してビルドエラーとなるか確認してみます。
takk@deb9:~$ cat para2.f90
program main
parameter (ifirst=1)
parameter (imax=2)
parameter (jfirst=1)
parameter (jmax=3)
imax=5
do i=ifirst,imax
do j=jfirst,jmax
write(*,*) 'i=',i,' / j=',j
end do
end do
stop
end
takk@deb9:~$ gfortran para2.f90
para2.f90:6:8:
imax=5
1
Error: Named constant ‘imax’ in variable definition context (assignment) at (1)
takk@deb9:~$
imax=5という代入を追加しましたが、ビルドでエラーとなりました。ちゃんと定数となっているようですね。
上記までのプログラムでは、parameterを複数行使い複数定義してましたが、変数宣言と同じく、一つのparamterに対して、複数の定数定義もできるのでこのような書き方もできます。
parameter (ifirst=1,imax=2,jfirst=1,jmax=3)


コメント