3

C または C++ に変換する必要がある数値コードがあります。f2c を使用してみましたが、Fortran コードでは機能しません。コードで C スタイルのプリプロセッサ ディレクティブ (#include) が使用されているため、f2c はエラーを出します。コードの readme には、これらのインクルードを展開するのは fort77 リンカで動作する Fortran77 であると記載されています。

このコードを正常に変換する方法を知っている人はいますか?

私の最後の手段は、単純なプリプロセッサを作成してこれらのインクルードを展開し、コードを f2c にフィードすることです。

注: 私はここで Windows/Visual C++ 環境で作業しているので、gcc の悪ふざけはおそらく価値があるよりも面倒なことになるでしょう...

4

4 に答える 4

9

私は長年、工学研究グループで働いていました。Fortran から C への自動変換を行っても、うまくいきませんでした。コードは特に理解しにくく、保守が困難でした。幸運だったのは、アルゴリズムのテンプレートとして Fortran コードを使用し、引き続き使用すると予想されるものをすべて再実装したことです。または、Fortran を更新して最新の Fortran コンストラクトを使用し、C/C++ に移行した場合と同じ値を多く取得することもできます。また、C から Fortran ルーチンを呼び出すことにもある程度成功しましたが、呼び出し規則の違いにより困難になることもありました。

于 2008-11-27T03:29:30.347 に答える
8

これかもしれないしかし、おそらく C スタイルのインクルードを使用しているので、それらのファイルをインクルードするためにファイルで C プリプロセッサを実際に実行できると考えましたか? 次に、その出力を取得して f2c で実行できます。

(私はこの問題の専門家ではありません。必要に応じてこれに反対票を投じてください。)

于 2008-11-27T03:22:19.847 に答える
7

手動で変換することでうまくいくかもしれません

#include "whatsit.f90"

「whatsit.f90」を含める

その後、f2c 変換を再試行します。

于 2008-11-27T03:24:45.753 に答える
4

Cプリプロセッサはありませんか?Unix では、ディレクティブ付きの Fortran を取り、それを#includeディレクティブなしの Fortran に変換する別のプログラム cpp が存在する場合があります#include。または、ソースの名前をxyz.f77( xyz.f) からxyz.cに変更し、C コンパイラを「プリプロセッサのみ」モードで実行して、出力をf2cプログラムへの新しい入力としてキャプチャすることもできます。出力内のディレクティブなどを排除するオプションについて心配する必要があるかもしれません。または#line、単純なフィルターを介して出力を実行する方がよいかもしれません (sedまたはperl心に浮かびます)。

于 2008-11-27T03:23:29.237 に答える