Fortran90(定数)

ずっと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)

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA