インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
インテル® Fortran コンパイラーのプリプロセッサー (fpp) は、インテル® Fortran 製品の一部として提供されます。インテル® Fortran ソースファイル用のプリプロセッサーを使用する場合、生成される出力ファイルはコンパイラーによって入力ソースファイルとして使用されます。
前処理は、プリプロセッサー・シンボル (マクロ) 置換、条件付きコンパイル、ファイルのインクルードといった処理を行います。インテル® Fortran の事前定義済みシンボルについては、「定義済みプリプロセッサー・シンボルの使用」で説明されています。
fpp は、ANSI C プリプロセッサーのいくつかの機能を備え、似たようなプリプロセッサー・ディレクティブのセットをサポートしています。プリプロセッサー・ディレクティブは、Fortran ソースファイルの 1 列目から開始する必要があります。プリプロセッサー・ディレクティブは、Fortran 言語の一部ではありません。また、Fortran 文の規則も適用されません。プリプロセッサー・ディレクティブの構文は、C プリプロセッサー・ディレクティブを基にしています。
コンパイラーには、fpp を使用しない、ディレクティブに基づく限定的な条件付きコンパイル機能が含まれています。IF ディレクティブ構造は、限定的な条件付きコンパイル機能を提供します。
インテル® Fortran プリプロセッサー (fpp) の代わりに、別の Fortran プリプロセッサーを指定することもできます。詳細は、fpp-name オプションを参照してください。
デフォルトでは、コンパイル前に、プリプロセッサーは実行されません。ただし、ソースファイルのファイルの拡張子が.fpp、.F、.F90、.FOR、.FTN、または .FPP の場合、インテル® Fortran コンパイラーは自動的に fpp を呼び出します。例えば、次のコマンドは、fpp プリプロセッサー・ディレクティブを含むソースファイルを前処理して、その前処理済みファイルをコンパイラーとリンカーに渡します。
ifort source.fpp
その他の Fortran 拡張子のファイルを前処理する場合は、fpp コンパイラー・オプションを使用して、プリプロセッサーを明示的に指定する必要があります。
fpp プリプロセッサーは、自由形式と固定形式の両方の Fortran ソースファイルを処理することができます。デフォルトでは、ファイル拡張子が .F、.f、.for、または .fpp のファイル名は、固定形式であると見なされます。ファイル拡張子が .F90 または .f90 (あるいは、ここで記載されていないその他の拡張子) のファイル名は、自由形式であると見なされます。自由形式を指定するには free コンパイラー・オプションを、明示的に固定形式を指定するには fixed コンパイラー・オプションを指定します。
fpp プリプロセッサーは、固定形式のソース行でタブ形式を認識します。
次の方法で、FPP を明示的に実行できます。
ifort コマンドラインで、ifort コマンドと fpp コンパイラー・オプションを使用します。デフォルトでは、指定したファイルがコンパイルおよびリンクされます。中間ファイル (.i または .i90) を残すには、[Q]save-temps コンパイラー・オプションを指定します。
コマンドラインで FPP コマンドを使用します。この場合、コンパイラーは起動されません。FPP コマンドラインを使用する場合、入力ファイルと中間出力ファイル (.i または .i90) を指定する必要があります。詳細は、コマンドラインから fpp -help (Linux* および macOS*) または fpp /help (Windows*) と入力してヘルプを表示してください。
Microsoft* Visual Studio* IDE では、プロパティー・ページの [Fortran] > [Preprocessor (プリプロセッサー)] カテゴリーで [Preprocess Source File (プリプロセス・ソース・ファイル)] オプションを [Yes (はい)] に設定します。中間ファイルを残すには、[Fortran] > [Command Line (コマンドライン)] カテゴリーの [Additional Options (追加のオプション)] に /Qsave_temps を追加します。
次の表は、一般的な cpp 機能に対する fpp のサポートを示します。
サポートされている cpp 機能 |
サポートされていない cpp 機能 |
---|---|
#define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、#include、#error、#warning、#line |
#pragma、#ident |
#(文字列サイズ) 演算子および ##(連結) 演算子 |
最初の # 文字よりも前にある空白またはタブ文字 # の後の空の行 |
否定演算子としての ! の使用 |
バックスラッシュ (\) と改行の組み合わせ |
cpp と違い、fpp では、可能な場合に継続行を 1 行にマージしません。
通常、上記のような fpp 前処理コマンド使用している場合を除いて、Fortran ソースプログラムの前処理を指定する必要はありません。
Fortran をサポートしていないプリプロセッサーを使用すると、特に "FORMAT (\\I4)" 文で、Fortran コードが壊れる可能性があります。ほとんどの C/C++ プリプロセッサーでは、ダブル・バックスラッシュ (\\) がレコードの終わりを示すため、cpp で前処理するとプログラムの意味が変わることになります。
ソースファイルには、次の形式の fpp トークンを含めることができます。
fpp プリプロセッサー・ディレクティブ名
fpp プリプロセッサー・ディレクティブに関する詳細は、「fpp プリプロセッサー・ディレクティブの使用」を参照してください。
Fortran キーワードを含むシンボリック名
fpp では、名前に Fortran と同じ文字を使用することができます。シンボリック名に関する詳細は、「定義済みプリプロセッサー・シンボルの使用」を参照してください。
定数
整数、実数、倍精度および 4 倍精度の実数、バイナリー、8 進数、16 進数 (代替表記を含む)、文字、ホレリス定数を使用できます。
特殊文字、スペース、タブ文字、改行文字
コメント。次のものを含みます。
Fortran 言語のコメント。先頭が C、c、*、d、または D の固定形式のソース行は、コメント行と見なされます。! 記号から行末まではコメントと見なされます。ただし、#if ディレクティブまたは #elif ディレクティブの定数式で "!" が使用されている場合は除きます。コメント内のマクロは展開されませんが、-f-com=no によって有効にすることができます。
/* および */ で囲まれた fpp のコメント。fpp コメントは出力から除外され、コメント内のマクロは展開されません。各 /* には、対応する */ が必要です。fpp コメントは、広範囲なソースをコンパイル対象外とする場合に便利です。Fortran のコメント記号を使用して、各行をコメントにする必要がありません。
C++ のようにダブルスラッシュ (//) で始まる行コメント。
トークン文字列は、Fortran の継続文字 & を使用している場合のみ、複数行に渡ることができます。fpp は、そのような行を 1 行にマージしません。
識別子は、fpp によって、常に 1 行に配置されます。例えば、入力識別子が複数行に渡る場合、fpp はそれを 1 行にマージします。
出力には、編集された入力のコピーと次の形式の情報が含まれます。
#line_number file_name
これらの情報は、出力行のオリジナルのソース行番号とファイル名を示すために挿入されます。これらの情報を生成しないようにするには、P プリプロセッサー・オプションを使用します。
fpp 診断メッセージは 3 つあります。
警告: fpp はソースコードの前処理を続行し、0 を返します。
エラー: fpp は前処理を続行し、非ゼロ値 (エラー番号) を返します。
致命的なエラー: fpp は前処理を停止し、非ゼロ値を返します。
fpp によって生成されるメッセージには、問題の説明が含まれています。stderr に、エラーが発生した行番号、ファイル名、およびその診断が表示されます。