ソース・プログラムをコンパイルするには、xlf90、xlf90_r、 xlf90_r7、xlf95、xlf95_r、 xlf95_r7、xlf、xlf_r、 xlf_r7、f77、あるいは fort77 コマンドを次の形式で使用します。
| .----------------------------------. | V | |>>-+-xlf90----+----+--------------+----input_file---+---------->< | +-xlf90_r--+ '-cmd_line_opt-' | +-xlf90_r7-+ | +-xlf95----+ | +-xlf95_r--+ | +-xlf95_r7-+ | +-xlf------+ | +-xlf_r----+ | +-xlf_r7---+ | +-f77------+ | '-fort77---' | |
これらのコマンドはすべて、本質的に同じ Fortran 言語を受け入れます。主要な違いは、別のデフォルト・オプション (/etc/xlf.cfg ファイルを参照) を使用していることです。
呼び出しコマンドは、Fortran ソース・ファイルをコンパイルするのに必要なステップを実行して、すべての .s ファイルをアセンブルし、オブジェクト・ファイルとライブラリーをリンクして 1 つの実行可能プログラムを作成します。特に、xlf_r、xlf_r7、xlf90_r、xlf90_r7、xlf95_r、および xlf95_r7 コマンドは、スレッド・セーフ・コンポーネント (ライブラリー、 crt0_r.o など) を使用してオブジェクト・ファイルをリンクしたりバインドしたりします。
以下に示す表では、使用できる呼び出しコマンドを要約します。
ドライバー呼び出し | パスまたは位置 | 主な機能 | リンクされるライブラリー |
---|---|---|---|
xlf90 | /usr/bin | Fortran 90 | libxlf90.a |
xlf90_r | /usr/bin | スレッド・セーフ Fortran 90、オペレーティング・システム・デフォルト POSIX pthreads API | libxlf90_r.a |
xlf90_r7 | /usr/bin | スレッド・セーフ Fortran 90、Draft 7 POSIX pthreads API | libxlf90_r.a |
xlf95 | /usr/bin | Fortran 95 | libxlf90.a |
xlf95_r | /usr/bin | スレッド・セーフ Fortran 95、オペレーティング・システム・デフォルト POSIX pthreads API | libxlf90_r.a |
xlf95_r7 | /usr/bin | スレッド・セーフ Fortran 95、Draft 7 POSIX pthreads API | libxlf90_r.a |
xlf | /usr/bin | FORTRAN 77 | libxlf90.a |
xlf_r | /usr/bin | スレッド・セーフ FORTRAN 77、オペレーティング・システム・デフォルト POSIX pthreads API | libxlf90_r.a |
xlf_r7 | /usr/bin | スレッド・セーフ FORTRAN 77、Draft 7 POSIX pthreads API | libxlf90_r.a |
f77 あるいは fort77 | /usr/bin | FORTRAN 77 | libxlf90.a |
呼び出しコマンドには、ディレクティブ・トリガーが以下のようになるという意味があります。
-qsmp コンパイラー・オプションを指定すると、以下のようになります。
XL Fortran は、ライブラリー libxlf90_t.a に加え、ライブラリー libxlf90_r.a も用意しています。ライブラリー libxlf90_r.a は、libxlf90_t.a のスーパーセットです。ファイル xlf.cfg は、xlf90_r、xlf90_r7、xlf95_r、xlf95_r7、 xlf_r、および xlf_r7 コマンドの使用時に、libxlf90_r.a に自動的にリンクするようにセットアップされています。
libxlf90_t.a は部分スレッド・サポート実行時ライブラリーです。このライブラリーは、使用に関する制限が 1 つ付いた状態で /usr/lib/libxlf90_t.a としてインストールされます。これは、ライブラリーのルーチンはスレッド再入可能ルーチンではなく、 1 つの Fortran のスレッドだけが、I/O オペレーションを実行したり、ライブラリーを使用するマルチスレッド・アプリケーションに Fortran の組み込み機能を呼び出すことができるからです。スレッドの同期によるオーバーヘッドが libxlf90_r.a で生じないようにするには、 Fortran スレッドが 1 つだけ存在しているマルチスレッド・アプリケーションで libxlf90_t.a を使用することができます。
複数の Fortran スレッドとともに複数の実行可能スレッドをバインドする場合には、 libxlf90_r.a のルーチンにリンクする目的で、 -lxlf90_t または -lxlf90 の代わりに -lxlf90_r をコマンド行に指定する必要があります。 xlf_r、 xlf_r7、xlf90_r、 xlf90_r7、 xlf95_r、または xlf95_r7 呼び出しコマンドを使用することによって、正しいリンクが保証されることに注意してください。
xlf は、可能な場合は必ず、 XL Fortran の初期バージョンと同じ I/O 形式、および FORTRAN 77 互換の実施動作を使用することによって、既存のプログラムとの互換性を維持します。
f77 は xlf と同一です (構成ファイルがカスタマイズされていないという前提の場合)。
既存の makefiles および build 環境との互換性を保持するために、これらのコマンドを引き続き使用しなければならない場合があります。ただし、これらのコマンドでコンパイルされたプログラムは、細かい点で Fortran 90 または Fortran 95 標準に従っていない場合があることに留意してください。
xlf、xlf_r、xlf_r7、および f77/|fort77 コマンドを使用するより、xlf90、xlf90_r、および xlf90_r7 コマンドを使用した方が、プログラムを Fortran 90 標準に一層合致させることができます。 xlf、xlf_r、xlf_r7、および f77/|fort77 コマンドを使用するより、xlf95、xlf95_r、および xlf95_r7 コマンドを使用した方が、プログラムを Fortran 95 標準に一層合致させることができます。新しいプログラムをコンパイルする場合には、xlf90、xlf90_r、xlf90_r7、xlf95、xlf95_r、および xlf95_r7 コマンドの方が適しています。これらのコマンドはどちらも Fortran 90 の自由ソース形式がデフォルトで使用できます。これを固定ソース形式に使用するには、-qfixed オプションを使用する必要があります。 I/O 形式は、これらの 6 つのコマンドとそれ以外のコマンドではわずかに異なっています。また、I/O 形式は、xlf90、xlf90_r、および xlf90_r7 コマンドのセットと、xlf95、xlf95_r、および xlf95_r7 コマンドのセットでも異なっています。できる限り、データ・ファイルに関しては Fortran 95 形式に切り替えることをお勧めします。
デフォルトでは、xlf90、xlf90_r、および xlf90_r7 コマンドは Fortran 90 標準に完全に準拠しているわけではありません。さらに、xlf95、xlf95_r、および xlf95_r7 コマンドもデフォルトで Fortran 95 標準に完全に準拠しているわけではありません。 |完全コンパイルを必要とする場合には、次のコンパイラー・オプション (およびサブオプション) の |いずれかを指定してコンパイルしてください。
-qnodirective -qnoescape -qextname -qfloat=nomaf:rndsngl:nofold -qnoswapomp
また、プログラムを実行する前に、次のようなコマンドを使用して実行時オプションを指定してください。
export XLFRTEOPTS="err_recovery=no:langlvl=90std"
デフォルト設定は、パフォーマンスと使いやすさの最善の組み合わせが得られるように設計されています。したがって、通常、デフォルト設定は必要な場合にだけ変更するようにしてください。上記のオプションの一部は、非常に特殊な状況で適合性を得るためにだけ必要です。たとえば、-qextname は、共通ブロックやサブプログラムなどの外部シンボルの 1 つに main という名前が付いている場合にだけ必要になります。
xlf_r、xlf_r7、xlf90_r、xlf90_r7、xlf95_r、または xlf95_r7 コマンドを使用して XL Fortran SMP プログラムをコンパイルできます。 xlf_r および xlf_r7 コマンドと xlf、xlf90_r および xlf90_r7 コマンドと xlf90 コマンド、また xlf95_r および xlf95_r7 コマンドと xlf95 コマンドは、それぞれほとんど同じです。主な違いは、xlf_r、xlf_r7、xlf90_r、xlf90_r7、xlf95_r、または xlf95_r7 コマンドを指定した場合、スレッド・セーフ・コンポーネント (ライブラリー、crt0_r.o など) がオブジェクト・ファイルのリンクおよびバインドに使用される点です。
これらの 6 つのコマンドの 1 つを単独で使用すると、並行処理が行われないことに注意してください。 SMP ディレクティブを認識して並列化を活動化するコンパイラーの場合には、-qsmp も指定する必要があります。または、これらの 6 つの呼び出しコマンドのいずれか 1 つと一緒に -qsmp オプションを指定することは可能です。 -qsmp を指定すると、ドライバーは構成ファイルのアクティブ・スタンザにある smplibraries 行で指定されたライブラリーにリンクします。
| |AIX バージョン 4.3 以降の XL Fortran では |、1003.1-1996 |(POSIX) 標準 pthreads API を使用した 64 ビット・スレッド・プログラミングが |サポートされます。また、Draft 7 と 1003.1-1996 標準 API の両方を使用した 32 ビット・プログラミングもサポートされます。
呼び出しコマンド (xlf.cfg 構成ファイルの対応するスタンザ) を使用し、 1003.1-1996 標準または Draft 7 インターフェース・ライブラリーのいずれかを指定して、プログラムのコンパイルおよびリンクを行うことができます。
xlf95_r test.f
xlf95_r7 test.f
xlf_r7、xlf90_r7、および xlf95_r7 コマンド、および xlf.cfg 構成ファイルの対応するスタンザでは、 xlf_r、xlf90_r、および xlf95_r コマンド、および対応するスタンザ (スレッド・サポートのレベルは除く) と同じサポートを提供しています。
XL Fortran は、デフォルトでは f90 コマンドまたは f95 コマンドを提供しませんが、root ユーザーは次のようなコマンドを使用して他の呼び出しコマンドの 1 つへのリンクを作成することにより、コマンドを作成できます。
ln /usr/bin/xlf90 /usr/bin/f90
または
ln /usr/bin/xlf95 /usr/bin/f95
root ユーザーではない場合は、独自のディレクトリーの 1 つのリンクを作成することができます。
f90 コマンド (デフォルトのサフィックスが .f90) を作成する場合、このコマンドでコンパイルしたファイルには、 program.f90 等の名前を付ける必要があります。同様に、f95 コマンド (デフォルトのサフィックスが .f95) を作成する場合、このコマンドでコンパイルしたファイルには、 program.f95 等の名前を付ける必要があります。
モジュールを使用するプログラム・ユニット、サブプログラム、またはインターフェース・ボディは、モジュールの後にコンパイルする必要があります。モジュール、およびモジュールを使用するコードが別個のファイルに入っている場合、モジュールが入っているファイルを最初にコンパイルする必要があります。同じファイルに入っている場合は、モジュールは、ファイル内のモジュールを使用するコードの前になければなりません。モジュールにあるエンティティーを変更する場合、そのモジュールを使用するファイルをすべて再コンパイルする必要があります。
コンパイルの完了前にコンパイラーを停止するには、対話モードで Ctrl+C を入力するか、 kill コマンドを使用してください。
コンパイラーへの入力ファイルには次のものがあります。
インクルード・ファイルもソースを含んでいて、 .f 以外のサフィックスを持っていることがしばしばあります。
構成ファイルのカスタマイズおよび -qsuffix オプションに記載されている fsuffix および cppsuffix 属性を使用する場合は、別のサフィックスを選択します。
osuffix 属性 (構成ファイルのカスタマイズ および -qsuffix オプション に説明されている) を使用して、別のサフィックスを選択することができます。
デフォルトの構成ファイルは /etc/xlf.cfg です。
-qpdf1 オプションは、以降のコンパイルで使用する、実行時プロファイル情報を作成します。この情報は、パターン 『.*pdf*』 に一致する名前で 1 つまたは複数の隠しファイルに格納されます。
XL Fortran が提供する出力ファイルは、以下のとおりです。
3 つの位置のいずれかにコンパイラー・オプションを指定することができます。有効範囲と優先順位は、使用する位置で定義されます。
(XL Fortran は、SOURCEFORM などの、オプション設定を指定できるコメント・ディレクティブも持っています。そのようなディレクティブの有効範囲と優先順位に関する一般的な規則はありません。)
位置 | 有効範囲 | 優先順位 |
---|---|---|
構成ファイルのスタンザの中 | 実際にそのスタンザでコンパイルされたすべてのファイル内のすべてのコンパイル単位。 | 下位 |
コマンド行 | そのコマンドでコンパイルされたすべてのファイル内のすべてのコンパイル単位。 | 中間 |
@PROCESS ディレクティブ (XL Fortran は、SOURCEFORM などの、オプション設定を指定できるコメント・ディレクティブも持っています。そのようなディレクティブの有効範囲と優先順位に関する一般的な規則はありません。) | 次のコンパイル単位 | 上位 |
異なる設定で複数回オプションが指定されると、通常は最後の設定が効力を発します。 XL Fortran コンパイラー・オプションの詳細記述内で、例外は個々の説明として記載され、『矛盾するオプション』という見出しが付いています。
XL Fortran は、従来の UNIX によるコマンド行オプションの指定方法をサポートしています。この方法では、次のように、負符号の後に 1 つまたは複数の文字 (フラグといいます) を指定します。
xlf95 -c file.f
しばしば複数のフラグを連結することも、個々に指定することもできます。
xlf95 -cv file.f # These forms xlf95 -c -v file.f # are equivalent
(例外がいくつかあります。たとえば、-pg。これは単一オプションで、-p -g と同じではありません。)
フラグの中には、引き数ストリングがさらに必要なものもあります。また、XL Fortran はそれらのフラグの解釈で柔軟性を持っています。最後に引き数を指定したフラグであれば、複数のフラグを連結することができます。フラグを指定する方法について、以下の例で示します。
# All of these commands # are equivalent. xlf95 -g -v -o montecarlo -p montecarlo.f xlf95 -g -v -omontecarlo -p montecarlo.f # Because -o takes a blank-delimited # argument, the -p cannot be concatenated. xlf95 -gvomontecarlo -p montecarlo.f # Unless we switch the order. xlf95 -gvpomontecarlo montecarlo.f
他の|コンパイラー、特に XL ファミリーのコンパイラーに精通していれば、すでにこれらのフラグの多くにも精通していることでしょう。
覚えやすい形式で多数のコマンド行オプションを指定して、コンパイル・スクリプトおよび makefiles を理解しやすくすることができます。
>>--q--option_keyword--+---------------------------------------+->< | .-:------------------------------. | | V | | '-=----suboption--+-----------------+-+-' | .-,--------. | | V | | '-=----argument-+-'
この形式では、ブランクの挿入に関しては、より制限的です。それぞれの -q オプションはブランクで区切らなければならず、 -q オプションと、その後に続く引き数ストリングとの間にブランクがあってはなりません。「フラグ」オプションの名前とは異なり、-q オプション名には、 q が小文字でなければならないことを除いて、大文字・小文字の区別がありません。 -q オプションとこれが必要としている引き数を分離するには等号を使用し、引き数ストリング内のサブオプションを分離するにはコロンを使用してください。
たとえば、次のようになります。
xlf95 -qddim -qXREF=full -qfloat=nomaf:rsqrt -O3 -qcache=type=c:level=1 file.f
ソース・ファイルに @PROCESS ディレクティブを入れることによって、個々のコンパイル単位に影響を与えるようにコンパイラー・オプションを指定することができます。 @PROCESS コンパイラー・ディレクティブによって、構成ファイル、デフォルト設定、またはコマンド行で指定したオプションをオーバーライドすることができます。
.-+---+--------------------------. | '-,-' | V | >>-@PROCESS----option--+--------------------+-+---------------->< '-( suboption_list )-'
固定ソース形式では、@PROCESS は 1 桁目から、または 6 桁目より後に開始できます。自由ソース形式では、@PROCESS コンパイラー・ディレクティブはどの桁からでも開始できます。
ステートメント・ラベルまたはインライン注釈を @PROCESS コンパイラー・ディレクティブと同じ行に入れることはできません。
デフォルト時には、@PROCESS コンパイラー・ディレクティブで指定するオプション設定は、ステートメントが存在するコンパイル単位に対してのみ有効です。ファイルが複数のコンパイル単位を持っている場合は、オプション設定は、次の単位がコンパイルされる前に、元の状態にリセットされます。 DIRECTIVE オプションによって指定されたトリガー定数は、ファイルの終わりまで (または NODIRECTIVE が処理されるまで) 有効です。
@PROCESS コンパイラー・ディレクティブは、通常、コンパイル単位の最初のステートメントの前にする必要があります。唯一の例外は、SOURCE および NOSOURCE を指定する場合です。この 2 つは、コンパイル単位内のいかなる場所にある @PROCESS ディレクティブでも使用することができます。
コンパイラーは、コンパイル中に必要に応じて他のコマンド (たとえば ld および as) を自動的に実行するので、通常は、これらのコマンドのオプションにユーザーが関与する必要はありません。 これらの個々のコマンドに対してオプションを選択したい場合は、 次のようにできます。
xlf95 -berok file.f # -berok is passed to ld
xlf95 -Wl,-berok file.f # -berok is passed to ld
この例では、ld オプション -berok はリンカー (-Wl オプションの l で指示される) の実行時にリンカーに渡されます。
この形式は、前の形式よりも一般的です。なぜなら、 -W オプションの後にさまざまな英字を使用することにより、 as コマンドおよびコンパイル中に呼び出される他のコマンドに代わって機能するからです。
たとえば、 /etc/xlf.cfg の xlf95 スタンザに以下の行を入れて、
asopt = "w" ldopt = "m"
次のコマンドを発行すると、
xlf95 -wm -Wa,-x -Wl,-s produces_warnings.s uses_many_symbols.f
produces_warnings.s ファイルはオプション -w と -x (警告を出して、相互参照を作成する) でアセンブルされて、オブジェクト・ファイルはオプション -m と -s (オブジェクト・ファイルのリストの書き込みと、最終実行可能ファイルの除去) でリンクされます。
お客様がコンパイラーの使用を監査する必要がある場合、XL Fortran コンパイラーを、LUM (ライセンス使用管理) を使用して制御されるライセンス管理 (LM) とすることができます。ライセンス使用管理は、以前は NetLS** / iFOR/LS** 製品を指していました。
システム管理者は、一連のクライアント・マシンで実行されている並列コンパイルの数を追跡することができます。コンパイラーはデフォルトで LM を使用可能にし、LUM の全機能が使用可能になります。
-qnolm コンパイラー・オプションを使用して LUM を使用不能にすることができます。特定のコンパイル時に LUM を使用不能にするには、コマンド行でこのオプションを使用してください。また、デフォルト時に LUM を使用不能にするには、構成ファイル (xlf.cfg) にこのオプションを入れてください。
XLF 用に購入したソフトウェア・ライセンスでは、特定数のユーザーがコンパイラーを操作することが許可されます。 LM は、デフォルト時にはオンで、使用可能にするパスワードが、 XL Fortran バージョン 8.1.1 に付随する「Using LUM User's Guide 」および「README.FIRST」の説明に従ってインストールされている場合に、ユーザーの数を追跡します。
XL Fortran ユーザーがネットワーク上に分散されている状況に応じて、 並行ネットワーク・ライセンス か並行ノードロック・ライセンス、または両方の組み合わせが使用できます。
各ユーザー ID に与えられている権限が不十分であれば、アクセスを拒否される場合もあります。
各ユーザー ID に与えられている権限が不十分であれば、アクセスを拒否される場合もあります。
RISC System/6000(R) は、以下の異なったチップ構成に基づくモデルを含みます。オリジナル POWER プロセッサー、PowerPC プロセッサー (POWER および PowerPC プロセッサー間のブリッジである 601 プロセッサーを含む) 、および POWER2、 POWER3、および POWER4 プロセッサー。
-qarch と -qtune を使用して、該当するアーキテクチャーに特定のコードを生成するようにコンパイラーに指示するプログラムを作成することができます。これにより、コンパイラーは、マシン特定の命令を活用してパフォーマンスを向上させることができます。 -qarch オプションは、コンパイル後のプログラムが実行できるアーキテクチャーを判別します。オプション -qtune と -qcache は、プラットフォーム固有の最適化の程度を改善します。
デフォルト時には、-qarch を設定すると、すべてのアーキテクチャーに共通の命令のみを使用するコードが作成され、結果として -qtune と -qcache の設定値は、これに伴って一般的なものとなります。特定のプロセッサー・セットまたはアーキテクチャーのパフォーマンスを調整するために、これらのオプションの 1 つまたは複数に別の設定値を指定する必要がある場合もあります。通常の試行過程では、まず -qarch を使用して、次に -qtune を追加し、次に -qcache を追加します。 -qarch のデフォルト値は -qtune や -qcache のデフォルト値にも影響するため、 -qarch オプション以外は必要でない場合がしばしばあります。
コンパイル中のマシンがターゲット・アーキテクチャーでもある場合は、 -qarch=auto によって、コンパイル中のマシンの設定値が自動的に検出されます。このコンパイラー・オプションの設定値の詳細については、 -qarch オプションを参照してください。 -O オプションの -O4 と -O5 も参照してください。
プログラムのほとんどを、特定のアーキテクチャーで実行するようにしている場合は、これらのオプションのうちの 1 つ以上を構成ファイルに追加しておけば、それをすべてのコンパイルのデフォルトにすることができます。
一般的なプログラミングの慣例では、 C プリプロセッサー (cpp) によってファイルを引き渡します。 cpp は、ユーザーが指定した条件に基づいて出力ファイルに行を組み込んだり、出力ファイルから行を削除したり (『条件付きコンパイル』) できます。また、ストリングを置換 (『マクロ展開』) することも可能です。
XL Fortran は cpp を使用して、コンパイル前にファイルをプリプロセスすることができます。また、いずれかの最適化プリプロセッサーを使用している場合も、他のプリプロセッサーより先に cpp が呼び出されます。
特定のファイルに対して cpp を呼び出すには、ファイル・サフィックス .F を使用してください。 -d オプションを指定すると、個々の .F ファイル filename.F は、中間ファイル Ffilename.f にプリプロセスされて、これがコンパイルされます。 -d オプションを指定しないと、中間ファイルの名前は /tmpdir/F8xxxxxx になります。ここで、x は英数字です。 tmpdir は、TMPDIR 環境変数に入れられている値であり、 TMPDIR に値が指定されていない場合は /tmp になります。中間ファイルは、 -d コンパイラー・オプションを指定することによって保管することができます。このオプションを指定しないと、ファイルは削除されます。 プリプロセスは行いたいが、オブジェクト・ファイルや実行可能ファイルは作成したくない場合は、 -qnoobject オプションも指定してください。
XL Fortran がファイルに cpp を使用するとき、プリプロセッサーは #line ディレクティブを出力します。これは、-d オプションを指定すると行われません。 #line ディレクティブは、 cpp かそれ以外の Fortran ソース・コード・ジェネレーターにより作成されたコードと、作成した入力コードを関連づけます。プリプロセッサーによって、コードの行が挿入されたり削除されたりする場合があります。コードの行を出力する #line ディレクティブは、オリジナルのソースで使用された行番号をリストして、プリプロセスされたコードに検出されるソース・ステートメントを識別するため、エラーの報告書作成およびデバッグの際に役に立ちます。
_OPENMP C プリプロセッサー・マクロを使用すれば、コードを条件付きで組み込めます。このマクロは、 -qsmp=omp コンパイラー・オプションが指定してあれば、 C プリプロセッサーが呼び出されるときに定義されます。このマクロの例を以下に示します。
program par_mat_mul implicit none integer(kind=8) ::i,j,nthreads integer(kind=8),parameter ::N=60 integer(kind=8),dimension(N,N) ::Ai,Bi,Ci integer(kind=8) ::Sumi #ifdef _OPENMP integer omp_get_num_threads #endif common/data/ Ai,Bi,Ci !$OMP threadprivate (/data/) !$omp parallel forall(i=1:N,j=1:N) Ai(i,j) = (i-N/2)**2+(j+N/2) forall(i=1:N,j=1:N) Bi(i,j) = 3-((i/2)+(j-N/2)**2) !$omp master #ifdef _OPENMP nthreads=omp_get_num_threads() #else nthreads=8 #endif !$omp end master !$omp end parallel !$OMP parallel default(private),copyin(Ai,Bi),shared(nthreads) !$omp do do i=1,nthreads call imat_mul(Sumi) enddo !$omp end do !$omp end parallel end
条件付きコンパイルの詳細については、「XL Fortran for AIX ランゲージ・リファレンス 」の『言語エレメント 』の章にある「条件付きコンパイル 」を参照してください。
cpp プリプロセスをカスタマイズできるようにするため、構成ファイルは属性 cpp、cppsuffix、および cppoptions を受け入れます。
文字 F は、オプション -t および -W を持つ C プリプロセッサーを表します。
マクロ展開は、予期しない結果 (たとえば、FORMAT ステートメントの変更、または 72 文字よりも長い行の作成など) を招いてデバッグが困難になる場合があるため、cpp は主に Fortran プログラムの条件付きコンパイルに使用することをお勧めします。条件付きコンパイルに最も頻繁に使用される cpp ディレクティブは、 #if、#ifdef、#ifndef、#elif、#else、#endif です。
コンパイラーは -I 以外の cpp オプションをコマンド行上で直接認識しないので、このようなオプションは、-W オプションを使用して渡す必要があります。たとえば、 AIXV4 という名前のシンボルの存在をテストする #ifdef ディレクティブがプログラムに含まれている場合は、次のようなコマンドでコンパイルすることにより、このシンボルを cpp に定義することができます。
xlf95 conditional.F -WF,-DAIXV4
Fortran と C では、一部の文字列の処理が異なるため、 /* や */ を使用する場合には注意して使用してください。 (これらは C の注釈区切り文字として解釈される場合があり、 Fortran の注釈の内部で使用した場合でも問題が起こる可能性があります。) また、?? で始まる 3 文字の文字列にも注意が必要です。 (これは C の三重音字と解釈される可能性があります。)
次の例を考慮します。
program testcase character a character*4 word a = '?' word(1:2) = '??' print *, word(1:2) end program testcase
プリプロセッサーが、ご使用の文字の組み合わせとそれに対応した三重音字文字列を突き合わせると、出力が予期したものとならない場合があります。
XL Fortran コンパイラー・オプション -qnoescape をコードで使用する必要がない 場合は、解決策として、文字ストリングをエスケープ・シーケンス word(1:2) = '\?\?' に置き換えることが考えられます。しかし、-qnoescape コンパイラー・オプションを使用している場合は、この解決策は役に立ちません。その場合は、三重音字文字列を無視する cpp が必要です。 XL Fortran は /usr/ccs/lib/cpp で見つかった /usr/ccs/lib/cpp を使用します。これは標準の cpp です。この cpp は ANSI C に準拠しているため、三重音字文字列を認識します。
AIX オペレーティング・システムでは、 cpp には -qlanglvl=classic というオプションがあります。このオプションは CSet++ のオプションと似ています。 したがって、AIX 4.1 では、次のコマンドを使用して、三重音字の例を コンパイルしてください。
xlf95 tst.F -d -v -WF,-qlanglvl=classic
これにより、cpp tst.F -qlanglvl=classic が呼び出されます。