3

FORTRAN コードを構成する .F ファイルと .H ファイルのコレクションがあります。.H ファイルをコンパイルするのに苦労しています。.H ファイルには、一連の共通ブロックが含まれています。.H ファイルの 1 つの例は次のとおりです。

*AC HEAD      
c                                                                       HEAD 1
      common/blah/ x(25), y, z(25), p(25,mnv),                          HEAD 2
     1                t(25,mx), d(25,mnv)                               HEAD 3
c                                                                       HEAD 4
ETC...

Google で回答を検索すると、.h ファイルは c/c++ ファイルであると言われていますが、c/c++ で記述されているようには見えません。gfortran も C ファイルだと思っているようです。

コンパイルしようとすると:

gfortran-4.5 -fdefault-real-8 -fbacktrace -fno-align-commons HEAD.h

エラーが発生します:

cc1: warning: command line option "-fdefault-real-8" is valid for Fortran but not for C
cc1: warning: command line option "-fbacktrace" is valid for Fortran but not for C
cc1: warning: command line option "-fno-align-commons" is valid for Fortran but not for C
HEAD.h:1:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘HEAD’

最初の行 '*AC HEAD' をコメントアウトしようとしましたが、エラーは *. それをコメントアウトするために HEAD # 値を含む最後の列に何かが必要ですか? C++ コンパイラで .H ファイルをビルドする必要がありますか?

4

1 に答える 1

8

それらをコンパイルしません。他の fortran ファイルを grep すると、それらがinclude HEAD.h「#include "head.h"」のようなものを使用してインクルードされていることがわかります (その 2 番目は私の推測です。C プリプロセッサを実行していると思います) fortran ファイル)。これらのインクルード ステートメントは、基本的に、コンパイル プロセス中にインクルード ステートメントがある場所ならどこでも、その .h ファイルのコピーを読み取ります。したがって、これは使用されるコードですが、単独でコンパイルされることはありません。

このように Fortran にヘッダー ファイルを含めることは、もはやベスト プラクティスではありません。コードを通じて共通ブロックを広く配布するためにヘッダー ファイルが使用されているため、なおさらです。したがって、このアプローチを使用して新しいコードを作成しないでください。しかし、それがこの特定の古いコードが行っていることです。

于 2011-05-03T16:42:58.397 に答える