Fortran90(継続行)

FORTRAN77を学習してプログラミングできるようになった気がしますので、Fortran90の方へ移っていきたいと思います。

Fortran90をビルドするには、拡張子を「.f」から「.f90」に変更すれば良いようです。しかも77の仕様で作成したソースコードは、Fortran90で使えるようです。
では、試してみます。

takk@deb9:~$ gfortran cut8.f -fdollar-ok

77でビルド後、90用にファイル名を変更して、ビルドします。

takk@deb9:~$ mv cut8.f cut8.f90
takk@deb9:~$ gfortran cut8.f90 -fdollar-ok
cut8.f90:12:56:

             OPEN(UNIT=10,FILE=ARGS(1:INDEX(ARGS,' ')-1),
                                                        1
Error: Syntax error in OPEN statement at (1)
cut8.f90:13:12:

      1      STATUS='OLD',
            1
Error: Unclassifiable statement at (1)
cut8.f90:14:12:

      2      ACCESS='SEQUENTIAL')
            1
Error: Unclassifiable statement at (1)
takk@deb9:~$

あれ、ビルド通りません。行の連結が上手くいっていないのでしょうか。
3行に渡ってOPEN関数を書いていましたが、1行にまとめてみます。

            OPEN(UNIT=10,FILE=ARGS(1:INDEX(ARGS,' ')-1),
     1      STATUS='OLD',
     2      ACCESS='SEQUENTIAL')

これが、こうなりました。

            OPEN(UNIT=10,FILE=ARGS(1:INDEX(ARGS,' ')-1),STATUS='OLD',ACCESS='SEQUENTIAL')
 

ビルドできました。

takk@deb9:~$ gfortran cut8.f90 -fdollar-ok
takk@deb9:~$

無理やり一行にしてしまいましたが、Fortran90で継続行の書き方が変わっているようですので、それに対応してみます。
行が継続する場合は、&を行末につけて、その次の行の開始にも&が必要になります。

            OPEN(UNIT=10,FILE=ARGS(1:INDEX(ARGS,' ')-1), &
     &      STATUS='OLD', &
     &      ACCESS='SEQUENTIAL')

ビルドして確認。

takk@deb9:~$ gfortran cut8.f90 -fdollar-ok
takk@deb9:~$

通りました。
&の位置はそんなに厳密でもないようです。

            OPEN(UNIT=10,FILE=ARGS(1:INDEX(ARGS,' ')-1), &
           &STATUS='OLD', &
           &ACCESS='SEQUENTIAL')
takk@deb9:~$ gfortran cut8.f90 -fdollar-ok
takk@deb9:~$

ずっと気になってますが、Fortran90になっても、-fdollar-okって必要なのでしょうか。はずしてビルドしてみます。

takk@deb9:~$ gfortran cut8.f90
cut8.f90:54:16:

  3300   FORMAT(A$)
                1
Fatal Error: Invalid character ‘$’ at (1). Use ‘-fdollar-ok’ to allow it as an extension
compilation terminated.
takk@deb9:~$

エラーになったので必要そうです。

Leave a Reply

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

CAPTCHA