インテル® Fortran コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
変数のクラスを 0 またはシグナル型 NaN に初期化します。
[Q]init keyword snan: インテル® Xeon Phi™ コプロセッサー x100 製品ファミリー (開発コード名 Knights Corner) をターゲットとするインテル® 64 アーキテクチャーでは利用できません。
Linux* および OS X*: | -init=keyword |
Windows®: | /Qinit:keyword |
keyword |
変数のクラスの初期値を指定します。 設定可能な値は以下のとおりです。
|
オフ |
デフォルトでは初期化は行われません。 |
このオプションは、変数のクラスを 0 またはシグナル型 NaN に初期化します。
-init=zero または -init=snan (Linux* および OS X*) あるいは /Qinit:zero または /Qinit:snan (Windows®) オプションを指定すると、スカラー変数のみ初期化されます。 配列も初期化するには、-init=arrays (Linux* および OS X*) または Qinit:arrays (Windows®) オプションも指定する必要があります。
[Q]init snan と [Q]init zero を一緒に指定する場合、REAL および COMPLEX 型の特定の変数はシグナル型 NaN に初期化され、INTEGER および LOGICAL 型の特定の変数は 0 に初期化されます。
[Q]init オプションは、次の変数のクラスに影響します。
組込み数値型の変数 (COMPLEX、INTEGER、LOGICAL、または REAL 型、任意の KIND)
メインプログラム以外にあり、ソースコードで初期化されていない SAVEd スカラーまたは配列変数
ローカルスカラーおよびローカル配列
ソースコードで初期化されていないモジュール変数
自動配列
POINTER または ALLOCATABLE 属性を持つ変数
ユーザー定義型の POINTER または ALLOCATABLE 属性を持つコンポーネントは [Q]init オプションで初期化可能
このオプションに関する一般的な制限は以下のとおりです。
[Q]init snan は、REAL または COMPLEX 型の特定の変数にのみ影響します。
EQUIVALENCE グループの変数は、シグナル型 NaN に初期化することはできません。
EQUIVALENCE グループのすべてのメンバーが明示的な初期化、あるいはデフォルトの初期化 (派生型の場合) を持たない場合は、0 に初期化することができます。
派生型、派生型の配列、およびそれらのコンポーネントは初期化されません。
整合配列を含む仮引数は初期化されません。
COMMON 内の変数は初期化されません。
[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* および OS X*) に下げます。
最適化レベルを維持したい場合は、スペキュレーションにより浮動小数点例外が生じる可能性があるときに、[Q]fp-speculation safe を追加してスペキュレーションを無効にします。
インテル® Xeon Phi™ コプロセッサー x100 製品ファミリー (開発コード名 Knights Corner) をターゲットとするインテル® 64 アーキテクチャーでは、シグナル型 NaN のトラッピングは利用できないため、[Q]init [no]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* および OS X* システム
/Qinit:snan,zero ! Windows® システム
次の例は、REAL および COMPLEX 組込み型のスカラーと配列をシグナル型 NaN に初期化し、INTEGER および LOGICAL 組込み型のスカラーと配列を 0 に初期化します。
-init=zero -init=snan -init=arrays ! Linux* および OS X* システム
/Qinit:zero /Qinit:snan /Qinit:arrays ! Windows® システム
[Q]init オプションを使用してランタイム時に初期化されていない浮動小数点変数の検出を行う例は、「インテル® Fortran での初期化されていない浮動小数点変数の検出」(https://software.intel.com/articles/detection-of-uninitialized-floating-point-variables-in-intel-fortran (英語)) を参照してください。