4.5 fppの使用
4.5.1 ソースファイル
fppは固定形式、自由形式、双方のソースファイルを扱えます。 拡張子(大文字、小文字の別はありません)が‘.f’, ‘.ff’, ‘.for’、または‘.ftn’のファイルは固定形式のソース ファイルとみなされます。 他のすべてのファイル(例えば拡張子‘.ff90’のファイル)は自由形式 のソースファイルとみなされます。 これらの仮定は-fixed オプション、-free オプショ ンによって変更できます。 固定形式の場合、タブ書式の行は認識されます。ソースファイルにはfppトークンを含めることができます。 fppトークンはFortranトークンと類似のもので次のいずれかです:
- fpp指示文名
- 英字名、またはFortranキーワード
- 定数表現
- Fortranコメント
- fppコメント
- 特殊文字(上記以外のブランク文字、制御文字、グラフィック文字)
4.5.2 出力
出力は入力に修正を加えたコピーと行番号指示文(-P が指定された 場合を除く)とからなります。 行番号指示文は#line-number file-name
という形式を持ち、オリジナルのソース行番号と後続の出力行のファイル名を示すため に挿入されます。
4.5.3 指示文
すべてのfpp指示文は先頭がハッシュ(#)文字で始まります。 指示文の字下げのため、先頭の‘#’の後にはブランクやtab文字を置くこ とができます。 指示文は次のような区分に分類されます:- マクロ定義
- 外部ファイルの取込み
- 行番号制御
- 条件付きソースコード選択
4.5.4 マクロ定義
#define指示文は簡単な文字列変数とより複雑なマクロの定義のために 使用されます:#define name token-string
これはfpp変数の定義です。 この定義以降のソース行中で‘name’ が現れた場合、それは ‘token-string’ によって置き換えられます。
#define name([argname1[,argname2]...]) token-string
これは関数形式マクロの定義です。 マクロ‘name’の後にコンマで区切られた引数が括弧に囲まれて配置され ていた場合、そのマクロ名はマクロ定義から生成される文字列によって置き換えられ ます。 マクロ定義の引数リストからの引数名が出現した場合、それは対応するマクロの実引 数に対するトークンシーケンスによって置き換えられます。
この指示文においてマクロ名と引数リストの左括弧の間にスペースやタブがあっては なりません。さもないと左括弧が置換用token-string の先頭文字とみなされる ことになります。
#undef name
name に対するマクロ定義をその定義様式(-D オプション、 #define指示文、あるいはデフォルト)によらず削除します。 指示文上、名前の後に追加のトークンを置くことはできません。
マクロnAGFORはデフォルトで定義されます。
4.5.5 外部ファイルの取込み
ファイルの取込みには2種類の形態があります:#include "filename"
および
#include <filename>
filename の内容をこの場所に読み込みます。 ファイルから読み込まれた行はあたかも現行ファイルの一部であるかのようにfppに よって処理されます。
<filename>の形式の場合、filename は標準の “include”ディレクトリ上でのみサーチされます。 詳細は-I、-Y オプションの項をご参照ください。 指示文上、最後の‘"’または‘>’の後にさらなるトー クンを配置することは許されません。
4.5.6 行番号制御
#line-number ["filename"]コンパイラの次のパスで使用するために行制御の情報を生成します。 line-number は符合のない整定数表現でなくてはなりません。それは後続行 の行番号を規定します。 "filename"が指定されなかった場合、現行のファイル名称は 変更されません。
4.5.7 ソーステキストの条件付き選択
ソーステキストの条件付き選択には3種類の形態があります:-
#if condition_1 block_1 #elif condition_2 block_2 #else block_n #endif
-
#ifdef name block_1 #elif condition block_2 #else block_n #endif
-
#ifndef name block_1 #elif condition block_2 #else block_n #endif
“#else”と“#elif”の部分は省略することができます。 “#elif”部分については複数あっても構いません。 それぞれの条件はfpp定数、マクロ、マクロ関数からなる数式です。 条件式はcpp数式に類似しており、Cのlong, octal, hexadecimal定数を除く任意の cpp演算とオペランドを含めることができます。 さらにfppはFortranの論理演算.NOT., .AND., .OR., .EQV., .NEQV.、関係演算子.GT., .LT., .LE., .GE.、論理定数.TRUE., .FALSE.を受け入れ、 評価することができます。