ずっと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)
コメント