インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

fpp プリプロセッサー・ディレクティブの使用

すべての fpp プリプロセッサー・ディレクティブは、行の先頭にシャープ記号 (#) が付きます。最初の "#" の後に、インデント用の余白 (ブランクまたはタブ文字) がくることもあります。

fpp プリプロセッサー・ディレクティブは、ソースコードの任意の場所で (Fortran 継続行の前であっても) 指定できます。ただし、マクロ呼び出し内の fpp プリプロセッサー・ディレクティブを、継続記号により複数行に分けることはできません。

fpp プリプロセッサー・ディレクティブは、用途ごとに分類することができます。

文字列を代入するためのプリプロセッサー・ディレクティブ

次の fpp プリプロセッサー・ディレクティブは、プログラムで代入を行います。

プリプロセッサー・ディレクティブ

結果

__FILE__

この文字列を入力ファイル名 (文字列) に置換します。

__LINE__

この文字列を入力ファイル中の現在の行番号 (整数定数) に置換します。

__DATE__

この文字列を fpp が入力ファイルを処理した日付 (Mmm dd yyyy 形式の文字列) に置換します。

__TIME__

この文字列を fpp が入力ファイルを処理した時間 (hh:mm:ss 形式の文字列) に置換します。

__TIMESTAMP__

この文字列を fpp が入力ファイルを処理した時間 ("day date time year" 形式の文字列) に置換します。day は 3 文字からなる曜日の省略形、dateMmm ddtimehh:mm:ssyearyyyy になります。

外部ファイルをインクルードするためのプリプロセッサー・ディレクティブ

外部ファイルをインクルードするには、プリプロセッサー・ディレクティブ #include を次のいずれかの形式で指定します。

#include "filename"
#include <filename>

#include は、指定されたファイル内容を、ソースファイルの指定された位置またはデフォルトの位置に読み取ります。ファイルから読み取られる行は、fpp により、同一ファイルの一部のように処理されます。

<filename> 形式を使用する場合、filename は、標準の "include" ディレクトリー内でのみ検索されます。詳細は、「Fortran プリプロセッサー・オプションの使用」-I オプションまたは -Y オプションの説明を参照してください。ディレクティブ行の最後にある '"' または ">" の後にトークンを追加することはできません。

#include "filename" の場合、filenames は次の順に検索されます。

#include <filename> の場合、filenames は次の順に検索されます。

行を制御するためのプリプロセッサー・ディレクティブ

プリプロセッサー・ディレクティブ #line-number は、Fortran コンパイラーの行制御情報を生成します。次の形式で指定します。

#line-number "filename"

#line-number は、次の行の号番号を示す整数定数です。"filename" は、行が含まれているファイルの名前です。"filename" が指定されていない場合は、現在のファイル名が使用されます。

fpp 変数とマクロを定義するためのプリプロセッサー・ディレクティブ

プリプロセッサー・ディレクティブ #define は、単純な文字列変数とより複雑なマクロの両方の定義に使用されます。次の 2 つの形式があります。

定義の有効範囲は、#define から現在のファイルの最後までで、その間のすべてのソース行 (および #include ファイルのソース行) が含まれます。ただし、次のものは除きます。

マクロを未定義にするためのプリプロセッサー・ディレクティブ

プリプロセッサー・ディレクティブ #undef の形式は次のとおりです。

#undef name

このプリプロセッサー・ディレクティブは、(D オプション、#define プリプロセッサー・ディレクティブ、またはデフォルトによる) name の定義をすべて削除します。ディレクティブ行の name の後にトークンを追加することはできません。

name が定義されていない場合、#undef は効果がありません。

マクロを展開するためのプリプロセッサー・ディレクティブ

マクロの展開時に、行のカラム幅が 72 (固定形式) または 132 (自由形式) を超える場合、fpp は適切な Fortran の継続行を挿入します。

固定形式の場合、ラベルフィールドにおけるマクロの展開には制限があります (位置 1-5):

固定形式で -Xw オプションが指定されると、マクロ呼び出しが文の位置で発生し、マクロ名が Fortran のキーワードで始まる場合や Fortran のキーワードと同じ場合、あいまいな状況が発生します。次の例について考えてみます。

#define callp(x)   call f(x)
  call p(0)

この例では、fpp は callp をどのように解釈すべきか判断できません。マクロ名と見なされる可能性もあります。現在の実装では、次のことが行われます。

上の例では、マクロが展開され、次の警告が表示されます。

警告: マクロ callp の代入が正しくない可能性があります。

この警告は、固定形式のコードの前処理で、スペースが区切り文字として解釈されない場合にのみ表示されます。

次の場合は、マクロ名がキーワードと同じです。

 #define INT  INTEGER*8
              INTEGER k

INTEGER キーワードは、INT マクロ名よりも先にあります。このようなマクロ定義の前処理では、警告は表示されません。

ソーステキストの条件付き選択を行うためのディレクティブ

次の 3 つのプリプロセッサー・ディレクティブは、ソーステキストを選択するための条件付き構造です。

#else、#elif、#endif プリプロセッサー・ディレクティブはオプションです。上記のプリプロセッサー・ディレクティブで使用できます。

次の条件すべてを満たす場合のみ、対応する #else, #elif または #endif までの行が出力されます。

#if ディレクティブで許可されている条件がすべて #elif ディレクティブでも許可されている場合。#if、#ifdef、または #ifndef ディレクティブと対応する #else ディレクティブまたは #endif ディレクティブの間に #elif がある場合。

条件式

condition_1condition_2、などは、fpp 定数、マクロ、組込み関数を含む論理式です。条件式では、次の演算子を使用できます。

#ifdef は #if defined(name) の省略で、#ifndef は #if .not. defined(name) の省略です。

定数式では、これらの演算子、整数定数、名前のみ使用できます。-D オプション、#define プリプロセッサー・ディレクティブ、またはデフォルトにより宣言されていない名前の値は 0 です。C 演算子の != (等しくない) は、#if プリプロセッサー・ディレクティブや #elif プリプロセッサー・ディレクティブで使用できますが、! がデフォルトで Fortran のコメント記号と見なされる #define プリプロセッサー・ディレクティブでは使用できません。

関連情報