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

init、Qinit

変数のクラスを 0 またはさまざまな数値型の例外値に初期化します。

構文

Linux* および macOS*:

-init=keyword[, keyword]

Windows*:

/Qinit:keyword[, keyword]

引数

keyword

変数のクラスの初期値を指定します。設定可能な値は以下のとおりです。

[no]arrays

配列またはスカラーの変数を初期化するかどうかを指定します。arrays を指定すると、配列またはスカラーの変数が初期化されます。noarrays を指定するか、arrays または noarrays を指定しない場合、スカラーの変数のみ初期化されます。また、noarrays キーワードを指定する場合、少なくとも 1 つの別のキーワードを一緒に指定する必要があります。

huge または minus_huge

次の両方を指定します。

  • REAL または COMPLEX 組込み型の初期化されていない保存済み、ローカル、自動、または割り当て済み変数を、すべて表現可能な正または負の最大実数値に初期化するかどうかを指定します。

  • INTEGER 組込み型の初期化されていない保存済み、ローカル、自動、または割り当て済み変数を、すべて表現可能な正または負の最大整数値に初期化するかどうかを指定します。

infinity または minus_infinity

REAL または COMPLEX 組込み型の初期化されていない保存済み、ローカル、自動、または割り当て済み変数を、すべて正または負の無限大に初期化するかどうかを指定します。

[no]snan

REAL または COMPLEX 組込み型の初期化されていない保存済み、ローカル、自動、または割り当て済み変数を、すべてシグナル型 NaN に初期化するかどうかを指定します。

tiny または minus_tiny

REAL または COMPLEX 組込み型の初期化されていない保存済み、ローカル、自動、または割り当て済み変数を、すべて表現可能な正または負の最小実数値に初期化するかどうかを指定します。

[no]zero

REAL、COMPLEX、INTEGER、または LOGICAL 組込み型の初期化されていない保存済み、ローカル、自動、または割り当て済み変数を、すべて 0 に初期化するかどうかを指定します。

/Qinit:[no]zero/Qzero[-] (Windows*) の後継オプション、-init=[no]zero-[no]zero (Linux* および macOS*) の後継オプションです。

デフォルト

オフ

デフォルトでは初期化は行われません。

説明

このオプションは、変数のクラスを 0 またはさまざまな数値型の例外値 (正または負の最大値、正または負の無限大、シグナル型 NaN、正または負の最小値) に初期化します。

キーワード [minus_]huge[minus_]infinitysnan[minus_]tiny、または zero のみ指定すると、[Q]init オプションはスカラー変数にのみ影響します。配列にも初期化を適用するには、arrays キーワードを一緒に指定する必要があります。

ALLOCATE 文と 1 つ以上の [Q]init キーワードを指定した場合、初期化子は ALLOCATE 文によって割り当てられたメモリーに適用されます。

キーワードは、さまざまな数値型に次の順序で適用されます。

次の変数のクラスが [Q]init オプションによって初期化されます。

このオプションに関する一般的な制限は以下のとおりです。

次の指定方法はすべて特定の数値配列とスカラーをゼロに初期化します。

キーワードの組み合わせは、次のように、左から右へ互いを無効にします。

REAL または COMPLEX 変数は、hugeminus_hugeinfinityminus_infinitytinyminus_tinysnan、あるいは zero に初期化できるため、これらの初期化は次の順序で適用されます。

  1. snan

  2. infinity または minus_infinity

  3. tiny または minus_tiny

  4. huge または minus_huge

  5. zero

INTEGER 変数は、hugeminus_huge、または zero に初期化できるため、これらの初期化は次の順序で適用されます。

  1. huge または minus_huge

  2. 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 を使用します。

IDE オプション

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 (英語)) を参照してください。

関連情報