2

私はgfortranで次のコードをコンパイルしようとしています:

  INTEGER F(10),G(14),LUN(5)
  DIMENSION MESSG(NMESSG) 
  DATA F(1),F(2),F(3),F(4),F(5),F(6),F(7),F(8),F(9),F(10) 
 1   / 1H( ,1H1 ,1HX ,1H, ,1H  ,1H  ,1HA ,1H  ,1H  ,1H) / 
  DATA G(1),G(2),G(3),G(4),G(5),G(6),G(7),G(8),G(9),G(10) 
 1   / 1H( ,1H1 ,1HX ,1H  ,1H  ,1H  ,1H  ,1H  ,1H  ,1H  / 
  DATA G(11),G(12),G(13),G(14)
 1   / 1H   ,1H   ,1H   ,1H)  / 
  DATA LA/1HA/,LCOM/1H,/,LBLANK/1H / 

次のエラーが発生します。

エラー:(1)の式に右括弧が必要です:

 1   / 1H( ,1H1 ,1HX ,1H, ,1H  ,1H  ,1HA ,1H  ,1H  ,1H) /           
                                                      1

エラーで参照されている行は、コードスニペットの4行目です。誰かが私の問題が何であるか知っていますか?私はこれが本当に古いコードであることを知っていますが、私はそれを科学的なアプリケーションで継承し、それを機能させる必要があります。

4

2 に答える 2

4

古いコードでは、ホレリスHを使用して文字値を整数変数に配置しています。やや現代的なFortranは次のようになります。

character*10 F
DATA  F / "(1X,  A  )" /

より近代的な:

character (len=10) :: F = "(1X,  A  )"

しかし、これらはFのタイプを変更しており、コードの残りの部分に影響を与えます。したがって、これらの変更を使用するには他の書き直しが必要になりますが、それが私のコードである場合は、問題のあるコードセクションがいかに古風で読みにくいかを考慮して検討します。それが大変な作業である場合、gfortranでコンパイルするには次のようになります。

  program f2
  INTEGER F(10),G(14),LUN(5)
  DATA F(1),F(2),F(3),F(4),F(5),F(6),F(7),F(8),F(9),F(10)
 $  / 1H( ,1H1 ,1HX ,1H, ,1H  ,1H  ,1HA ,1H  ,1H  ,1H) /
  DATA G(1),G(2),G(3),G(4),G(5),G(6),G(7),G(8),G(9),G(10), G(11),G(12),G(13),G(14)
 $  / 1H( ,1H1 ,1HX ,1H  ,1H  ,1H  ,1H  ,1H  ,1H  ,1H   ,1H   ,1H   ,1H   ,1H)  /
  DATA LA/1HA/,LCOM/1H,/,LBLANK/1H /
  end

gfortran-mp-4.7  -O3  -ffixed-form  -ffixed-line-length-none  -std=legacy f2.f
于 2013-02-28T04:03:08.800 に答える
2

これ1Hは、Fortran 66時代からホレリス定数として知られています。ここで、1はソースコード文字で表した定数の長さを示し、定数の実際の値は、次の文字数(空白を含む)のエンコード形式です。 H.エラーが発生しやすいことで有名です。

コードは固定形式のソースを使用しています。これは、エラーが発生しやすいことでも有名です。

とはいえ、主要な固定形式のソース列の損失を調整した後、コードはここで最新バージョンのgfortranを使用してコンパイルされます。ホレリス定数を使用すると(ただし、必要なのは空白の位置がずれているだけです)、物事がひどく壊れることがあります。

(皮肉なことに、固定形式のソースを使用すると、通常、意図的に放棄して空白を分散させることができます-これらの2つの言語機能の共通部分をかなり特別なものにします...)

その価値については、FとGのエンコードされたデータは単純なフォーマット指定子のように見えます。「現代の」Fortran(1977年以来!)では、文字変数を使用して、FとGのそれぞれの形式(1X,A)と(空白を省略)を保持します。(1X)他の変数は、単純な文字定数(A、コンマ、ブランク)のように見えます。おそらく、より大きなフォーマット指定子を構築するために使用します。

コードを少なくともフレアと奇妙な色の時代に持ち込むことは、私がそれを維持しなければならない場合、私の優先順位のリストでかなり高いでしょう。

于 2013-02-28T04:13:56.463 に答える