インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
変数のクラスを 0 またはさまざまな数値型の例外値に初期化します。
Linux* および macOS*: | -init=keyword[, keyword] |
Windows*: | /Qinit:keyword[, keyword] |
keyword |
変数のクラスの初期値を指定します。設定可能な値は以下のとおりです。
|
オフ |
デフォルトでは初期化は行われません。 |
このオプションは、変数のクラスを 0 またはさまざまな数値型の例外値 (正または負の最大値、正または負の無限大、シグナル型 NaN、正または負の最小値) に初期化します。
キーワード [minus_]huge、[minus_]infinity、snan、[minus_]tiny、または zero のみ指定すると、[Q]init オプションはスカラー変数にのみ影響します。配列にも初期化を適用するには、arrays キーワードを一緒に指定する必要があります。
ALLOCATE 文と 1 つ以上の [Q]init キーワードを指定した場合、初期化子は ALLOCATE 文によって割り当てられたメモリーに適用されます。
キーワードは、さまざまな数値型に次の順序で適用されます。
REAL および COMPLEX 変数の場合、キーワード [minus_]huge、[minus_]infinity、snan、[minus_]tiny、および zero は指定された値に初期化します。
INTEGER 変数の場合、キーワード [minus_]huge および zero は指定された値に初期化します。
LOGICAL 変数の場合、zero キーワードは .FALSE. に初期化します。
次の変数のクラスが [Q]init オプションによって初期化されます。
組込み数値型の変数 (COMPLEX、INTEGER、LOGICAL、または REAL 型、任意の KIND)
メインプログラム以外にあり、ソースコードで初期化されていない SAVEd スカラーまたは配列変数
ローカルスカラーおよびローカル配列
ソースコードで初期化されていないモジュール変数
自動配列
整数は zero、huge、または minus_huge.に設定できます。
COMPLEX 変数では、それぞれの実部と虚部が REAL として個別に初期化されます。
このオプションに関する一般的な制限は以下のとおりです。
キーワード [minus_]infinity、snan、および [minus_]tiny は、REAL または COMPLEX 型の特定の変数にのみ影響します。
EQUIVALENCE グループの変数は、数値型の例外値に初期化することはできません。
EQUIVALENCE グループのすべてのメンバーが明示的な初期化、あるいはデフォルトの初期化 (派生型の場合) を持たない場合は、0 に初期化することができますが、数値型の例外値に初期化することはできません。
派生型、派生型の配列、およびそれらのコンポーネントは初期化されません。
整合配列を含む仮引数は初期化されません。
COMMON 内の変数は初期化されません。
次の指定方法はすべて特定の数値配列とスカラーをゼロに初期化します。
[Q]init zero [Q]init arrays
[Q]init arrays [Q]init zero
[Q]init zero, arrays
[Q]init arrays, zero
キーワードの組み合わせは、次のように、左から右へ互いを無効にします。
zero と nozero は互いを無効にします。
snan と nosnan は互いを無効にします。
huge と minus_huge は互いを無効にします。
tiny と minus_tiny は互いを無効にします。
infinity、minus_infinity、および snan は互いを無効にします。
REAL または COMPLEX 変数は、huge、minus_huge、infinity、minus_infinity、tiny、minus_tiny、snan、あるいは zero に初期化できるため、これらの初期化は次の順序で適用されます。
snan
infinity または minus_infinity
tiny または minus_tiny
huge または minus_huge
zero
INTEGER 変数は、huge、minus_huge、または zero に初期化できるため、これらの初期化は次の順序で適用されます。
huge または minus_huge
zero
例えば、[Q]init zero, minus_huge, snan を指定して次のプログラムをコンパイルします。
program test real X integer K complex C end
変数 X は シグナル型 NaN (snan) に、変数 K は整数値 minus_huge に、変数 C の実部と虚部はシグナル型 NaN (snan) にそれぞれ初期化されます。
[Q]init snan を指定すると、シグナル型 NaN をトラップし停止するように浮動小数点例外処理フラグが設定されます。実行時にシグナル型 NaN がトラップされると、Fortran ライブラリーはそれをキャッチし、初期化されていない可能性のある変数に関するエラーメッセージとトレースバックを表示し、実行を停止します。実行が停止したら、デバッガーを使って初期化されていない変数が参照されているコード位置を特定できます。
[Q]init snan を指定すると、fpe 0 オプションも設定されます。コマンドラインで fpe 3 と [Q]init snan の両方を指定すると、コンパイル時に警告が出力されます。この場合、fpe 3 は無視されます。
最適化を有効にしてビルドすると、コンパイラーはデフォルトの浮動小数点環境 (浮動小数点例外がマスクされる) を想定し、浮動小数点演算のスペキュレーションを行います。[Q]init snan を追加すると、このスペキュレーションは例外となり (初期化されていない変数と無関係)、トラップされる可能性があります。これを回避するには、初期化されていない変数を検出する際に、最適化レベルを /O1 または /Od (Windows*)、あるいは -O1 または -O0 (Linux* および macOS*) に下げます。
最適化レベルを維持したい場合は、スペキュレーションにより浮動小数点例外が生じる可能性があるときに、[Q]fp-speculation safe を追加してスペキュレーションを無効にします。
潜在的なパフォーマンスの問題を回避するため、[Q]init はデバッグ (例: [Q]init zero) と初期化されていない変数のチェック (例: [Q]init snan) にのみ使用すべきです。
すべての変数を SAVE として指定する場合は、[Q]save を使用します。
Visual Studio*: [Data (データ)] > [Initialize Variables to Signaling NaN (変数をシグナル型 NaN に初期化する)]
[Data (データ)] > [Initialize Variables to Zero (変数をゼロに初期化する)]
[Data (データ)] > [Initialize Arrays as well as Scalars (配列とスカラーの初期化)]
Eclipse*: なし
Xcode*: [Data (データ)] > [Initialize Variables to Signaling NaN (変数をシグナル型 NaN に初期化する)]
[Data (データ)] > [Initialize Variables to Zero (変数をゼロに初期化する)]
[Data (データ)] > [Initialize Arrays as well as Scalars (配列とスカラーの初期化)]
なし
次の例は、REAL および COMPLEX 組込み型のスカラーをシグナル型 NaN に初期化し、INTEGER および LOGICAL 組込み型のスカラーを 0 に初期化します。
-init=snan,zero ! Linux* および macOS*
/Qinit:snan,zero ! Windows*
次の例は、REAL および COMPLEX 組込み型のスカラーと配列をシグナル型 NaN に初期化し、INTEGER および LOGICAL 組込み型のスカラーと配列を 0 に初期化します。
-init=zero -init=snan –init=arrays ! Linux* および macOS*
/Qinit:zero /Qinit:snan /Qinit:arrays ! Windows*
[Q]init オプションを使用してランタイム時に初期化されていない浮動小数点変数の検出を行う例は、「インテル® Fortran での初期化されていない浮動小数点変数の検出」(https://software.intel.com/articles/detection-of-uninitialized-floating-point-variables-in-intel-fortran (英語)) を参照してください。