F2C(1)

名称
f2c - Fortran 77 から C または C++ への変換

書式
f2c [-AaCcEfgpRrsUuvw] [-C++] [-cd] [-d dir] [-ec] [-e1c] [-ext] [-h[d]] [-I2] [-i2] [-i90] [-kr[d]] [-o name] [-onetrip] [-P[s]] [-r8] [-72] [-T dir] [-w8] [-Wn] [-z] [-!bs] [-!c] [-!I] [-!i8] [-!it] [-!P] file ...

解説
f2c は、 ファイル名が ‘.f’ あるいは ‘.F’ で終わるファイル files に記述された Fortran 77 ソースコードを、 カレントディレクトリ内の、 末尾の ‘.f’ または ‘.F’ を ‘.c’ に置き換えたファイル名の C (または C++) のソースファイルに変換します。 Fortran ファイルが指定されない場合、 f2c は標準入力から Fortran コードを読み込み、 標準出力に C を出力します。 ファイル名が ‘.p’ または ‘.P’ で終わる file は、 -P オプションで生成されるプロトタイプファイルとみなされ、 最初に読み込まれます。

オプション

-A  ANSI C を生成します。デフォルトは旧スタイルの C です。

-a  ローカル変数を static 変数ではなく automatic 変数とします。 ただし DATA , EQUIVALENCE , NAMELIST , SAVE 文に現れるものを除きます。

-C  添字値が宣言された配列範囲内にあるかどうかをチェックするコードを 生成します。

-C++
    C++ コードを生成します。

-c  オリジナルの Fortran ソースをコメントとして挿入します。

-cd cdabs, cdcos, cdexp, cdlog, cdsin, cdsqrt をそれぞれ 虚数組み込み関数 zabs, zcos, zexp, zlog, zsin, zsqrt として理解することを 止めます。

-d dir
    `.c' ファイルを、現在のディレクトリの代りに、ディレクトリ dir に書き込みます。

-E  初期化されない COMMON を Extern として宣言します( f2c.h において重複して extern 定義されます)。

-ec 初期化されていない COMMON ブロックを別々のファイルに配置します。 COMMON ABC はファイル abc_com.c に置かれます。 オプション -e1c によってそれらの別々のファイルを出力ファイルに束ねます。 その際、元のファイルにほどくための sed(1) スクリプトがコメントとして与えられます。

-e1c
    -ec の説明を参照。

-ext
    Fortran 77 拡張を見つけると警告します。

-f  自由形式(free-format)入力を仮定します。 72 カラム目以降のテキストも受理し、 72 文字より短い固定形式の行に対して空白のパディングを行いません。

-72 72 カラム目以降に書かれたテキストをエラーとします。

-g  オリジナルの Fortran の行番号を #line 行として埋め込みます。

-h[d]
    Fortran 66 の Hollerith の取り扱いをエミュレートします。すなわち、 文字列をワード(または、 -hd オプション指定時はダブルワード)境界にアラインしようとします。

-I2 INTEGER および LOGICAL を short 型、INTEGER*4 を long int 型とします。 デフォルトの libF77 および libI77 は INQUIRE においては INTEGER*4 だけ (LOGICAL は無し) を許可している ものと仮定します。 -I4 オプションは、INTEGER を long int とするデフォルト処理を確認します。

-i2 -I2 と同様ですが、修正された libF77 および libI77 ( -Df2c_i2 でコンパイルしたもの) を仮定します。 INTEGER および LOGICAL 変数は INQUIRE で代入でき、 配列長は short int で格納されます。

-i90
    Fortran 90 のビット操作組み込み関数 btest, iand, ibclr, ibits, ibset, ieor, ior, ishft, ishftc を理解することを 止めます。

-kr[d]
    K&R (第 1 版) の括弧つけ規則で再配置(rearrangement)可能な部分において、 Fortran の式評価を行うために一時変数を用います。 -krd オプションの場合、 単精度オペランドに対しても倍精度一時変数を使用します。

-o name
    C のソースコードをファイル name に書き出します。

-onetrip
    DO ループを、もしそこに到達すれば少なくとも一回は実行されるように コンパイルします。 (Fortran 77 の DO ループは、もし上限値が下限値より小さければ、 全く実行されません。)

-P[s]
    入力ファイル file.f あるいは file.F に含まれる定義に対する ANSI (あるいは C++) プロトタイプ宣言を ファイル file.P に書き出します。 Fortran コードを標準入力から読み込んでいる場合は、 標準出力の最初に書き出します。 -Ps オプションは -P オプションと同様ですが、 再度 f2c を実行するとプロトタイプあるいは宣言が変化する場合、 終了ステータス 4 で終了します。

-p  プリプロセッサ定義を出力して、 コモンブロックのメンバがローカル変数のように見えるようにします。

-v  コンパイル中に、ファイル名、プログラム名、プロシジャ名(複数) を表示します。

-R  REAL 型の関数や演算を DOUBLE PRECISION に拡張しません。 -!R オプションを用いるとデフォルトの、Fortran 77 と同様の動作になります。

-r  REAL 関数(組み込み関数を含む)の値を REAL にキャストします。

-r8 REAL を DOUBLE PRECISION に、COMPLEX を DOUBLE COMPLEX に拡張します。

-s  多次元の添字式を保存します。

-T dir
    一時ファイルをディレクトリ dir に生成します。

-U  変数や外部名の大文字小文字を区別します。 Fortran キーワードは 小文字 でなければなりません。

-u  変数のデフォルトの型は、Fortran のデフォルト規則に従うのではなく、 ‘未定義’ とします。

-w  全ての警告メッセージを抑制します。 -w66 オプションの場合は、Fortran 66 との互換警告メッセージのみ抑制します。

-w8 COMMON あるいは EQUIVALENCE 文で double 値が不正なワード境界に 配置された場合の警告を抑制します。

-Wn 数値変数を文字データで初期化する際、 1 ワードを n 文字分と仮定します(デフォルトは 4)。

-z  暗黙的には DOUBLE COMPLEX を認識しません。

-!bs
    文字列中の バックスラッシュ エスケープ (\", \', \0, \\, \b, \f, \n, \r, \t, \v) を認識しません。

-!c C の出力は抑制し、 -P 出力を行います。

-!I include 文を不許可とします。

-!i8
    INTEGER*8 を不許可とします。

-!it
    既に定義あるいはプロトタイプ宣言された手続きへの引数として 使われた部分から、型宣言していない EXTERNAL 手続きの型を推測しません。

-!P 使われ方から ANSI あるいは C++ のプロトタイプを推測しないようにします。

オブジェクトコードは ld(1) または cc(1) でロードしなければならず、 次のライブラリを指定する必要があります: -lf2c -lm

関連ファイル
file.[fF] 入力ファイル file.c 出力ファイル /usr/include/f2c.h ヘッダファイル /usr/lib/libf2c.a 組み込み関数ライブラリおよび Fortran 77 I/O ライブラリ

関連項目
S. I. Feldman, P. J. Weinberger, A Portable Fortran 77 Compiler, UNIX Time Sharing System Programmer's Manual, Volume 2, 1990, AT&T Bell Laboratories, Tenth Edition.

診断
f2c が出力する診断メッセージは、 それ自身で理解可能なものであるはずです。

バグ
浮動小数点定数表記は f2c を実行するマシンの浮動小数点演算を用いて単純化されていますので、 普通、その精度は高々 10 進 16 ないし 17 桁です。

型なし EXTERNAL 関数は int として宣言されます。

f2c の有効オプションのうち、 ここに記述されていないものがいくつかあります。 これらは /usr/src/usr.bin/f2c/main.c の先頭部分で説明されています。