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