2

ファイル 'ah' を Fortran プログラム 'bf' にインクルードしようとしています。ファイルの内容は次のとおりです。

ああ

c     This is a comment
      k = 10
 100  format( I5 )

bf

program test_include
    include 'a.h'
    write(*,100) k
end program test_include

次のコマンドを使用してファイル「bf」をコンパイルしようとすると

gfortran -ffree-form b.f

コンパイラはエラーを出します

    Included at b.f:2:
c     This is a comment
1
Error: Unclassifiable statement at (1)

しかし、コメント行を次のように変更すると

!c    This is a comment

gfortran はそれを正常にコンパイルし、プログラムは正しく実行されます。

「*.h」ファイルの「c」で始まる行を gfortran にコメントとして認識させる方法を教えてください。ライブラリから同様のファイル (「c」で始まるコメント付き) を自由形式の Fortran コードにインクルードしようとしていますが、そもそもそのファイルで「c」で始まるすべてのコメントを実際に作成することはできません。 '!'.

4

1 に答える 1

4

インクルード ファイルは固定形式です。自由形式と定型形式を 1 つのファイルに混在させることはできません。以来

[the] INCLUDE 行の効果は、あたかも参照されたソース テキストがプログラム処理の前に INCLUDE 行を物理的に置き換えたかのようです [,]

結合されたソース テキストは、固定形式または自由形式のいずれかである必要がありますが、両方を混在させることはできません。[出典: Fortran 2008 標準、Cl. 3.4 (6)]

これにより、次の 2 つのオプションが残ります。

  1. メインプログラムを固定形式に変換する、または
  2. インクルード ファイルを自由形式に変換します。

-ffixed-form1) については、 を指定し、フォーマットb.fを定型に準拠させる必要があります。b.f次に、次のようになります

      program test_include
          include 'a.h'
          write(*,100) k
      end program test_include

2) の場合、インクルード ファイルを自由形式に変換します。インクルードは次のように記述できます。

!     This is a comment
      k = 10
100  format( I5 )

すべてのファイルを変換できない場合は、ラッパー モジュールを固定形式でincludeソース コードに記述し、それ以降useは代わりにラッパー モジュールを記述することをお勧めします。あなたが提供したスニペットの場合、これにはさらに検討が必要ですが、変数/パラメーター/インターフェースのみを持つインクルードファイルの場合、これは次のようになります

      module wrapper_vars
          include 'vars.h'
      end module

サブルーチンと関数については、モジュールを使用することもできます:

      module wrapper_subroutines
      contains
          include 'subroutines.h'
      end module
于 2015-11-29T16:07:43.503 に答える