LoginSignup
4
2

More than 5 years have passed since last update.

ifortでコンパイルできるのにgfortranでコンパイルできない時

Posted at

誰かが書いたコードがFORTRAN77だった時、そしてそのコードがifortではコンパイルできるのにgfortranだとエラーが出てしまうときがあると思います。

parameter

例えば、gfortranのバージョンにも依存しますが、

      parameter ite = 1

はifortだとコンパイルできますが、gfortranではエラーが出る場合を警告が出る場合があります。
その場合には、

      parameter(ite = 1)

とします。

長さ制限

問題

ifortでは72文字の長さ制限に引っかからないのにgfortranでは引っかかる例として、

    implicit real*8 (a-h,o-z)
    a = (1+2+3+4+5+6+7+8+9+10)*(1+2+3+4+5+6+7+8+9+10)*(1+2+3+4+5+6+7+8+9+1)
    end

があります。これをtest.fと保存します。ifortの場合には

ifort test.f

はコンパイルできますが、gfortranの場合には、

gfortran test.f

ではコンパイルできません。
これは、最初の空白は実はタブになっていることがポイントです。
FORTRAN77は72文字制限があり、72文字を越えるとコンパイルができなくなります。
上の例では、タブの部分を除くと、72文字です。タブを何文字換算するかは機種に依存するかもしれませんが、ifortの場合には、このタブの部分の文字数のカウントをしていないために、コンパイルができます。
一方、gfortranはタブを文字数にカウントしているため、72文字制限に引っかかってしまい、コンパイルできません。

解決策

上記のコードをgfortranでもコンパイルしたい場合には、

gfortran test.f -ffixed-line-length-80

とします。-ffixed-line-length-80は、固定書式の長さを80にする、というコンパイルオプションです。
これを使うことで、制限が80文字になるため、タブが入っていても制限に引っかからなくなります。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2