+----------------------------------IBM 拡張----------------------------------+
- 注:
- この項では、変数のストレージ・クラスについてのみ扱っています。
名前付き定数およびそのサブオブジェクトは、リテラル の
ストレージ・クラスを持っています。
すべての変数は、根本的には、次の 5 つのストレージ・クラスの
いずれか 1 つによって表されます。
- Automatic
- プロシージャー内の変数のためのもので、プロシージャーの終了時に保持されません。
変数はスタック・ストレージ域に常駐します。
- Static
- プログラムが終了するまでメモリーを保持する変数のためのものです。
変数は、データ・ストレージに常駐します。
未初期化変数は、bss ストレージに常駐します。
- Common
- 共通ブロック変数のためのものです。
共通ブロック変数が初期化されると、ブロック全体がデータ・ストレージに常駐します。
初期化されない場合は、ブロック全体が bss ストレージに常駐します。
- Controlled Automatic
- 自動オブジェクトのためのものです。
変数はスタック・ストレージ域に常駐します。
XL Fortran は、プロシージャーへの入り口にストレージを割り振り、
プロシージャーが完了すると、そのストレージの割り振りを解除します。
- Controlled
- 割り振り可能オブジェクトのためのものです。
変数は、動的ストレージ域に常駐します。
ストレージの割り振りおよび割り振り解除は、明示的に行わなければなりません。
以下のストレージ・クラスは、それ自体にストレージは持っていませんが、
実行時に基本ストレージに関連付けられます。
- Pointee
- 対応する整数ポインターの値によって異なります。
- Reference parameter
- 仮引き数で、対応する実引き数がデフォルトの受け渡し方式
または %REF によってプロシージャーに渡されます。
- Value parameter
- 仮引き数で、対応する実引き数が値によってプロシージャーに渡されます。
引き渡し方法の詳細については、%VAL および %REFを参照してください。
変数名には、次の 1 つの方法によってストレージ・クラスが割り当てられます。
- 明示
- 仮引き数は、reference parameter または value parameter の明示的な
ストレージ・クラスを持ちます。
詳細については、%VAL および %REFを参照してください。
- Pointee 変数は、pointee の明示的なストレージ・クラスを持ちます。
- STATIC 属性が明示的に指定された変数は、static の明示的な
ストレージ・クラスを持ちます。
- AUTOMATIC 属性が明示的に指定された
変数は、automatic の明示的なストレージ・クラスを持ちます。
- COMMON ブロックに指定された変数は、common の明示的な
ストレージ・クラスを持ちます。
- SAVE 属性が明示的に指定された変数は、static の明示的な
ストレージ・クラスを持ちます。ただし、これは、変数が COMMON ステートメントに
対しても指定されない場合に限られます。この場合、ストレージ・クラスは common となります。
- DATA ステートメントに指定される変数、または型
宣言ステートメントで初期化される変数は、static の明示的なストレージ・クラスを持ちます。
ただし、これは、変数が COMMON ステートメントに対しても指定されない場合に
限られます。この場合、そのストレージ・クラスは common となります。
- 文字型または派生型である関数結果変数は、reference parameter の
明示的なストレージ・クラスを持ちます。
- SAVE 属性または STATIC 属性のどちらも
持っていない関数結果変数は、automatic の明示的なストレージ・クラスを持ちます。
- 自動オブジェクトは、controlled automatic の明示的なストレージ・クラスを持ちます。
- 割り振り可能オブジェクトは controlled という明示的なストレージ・クラスを持ちます。
上記のいずれにも該当しない変数で、明示的なストレージ・クラスを持つ
変数と同等な変数は、明示的なストレージ・クラスを継承します。
上記のいずれにも該当しない変数で、明示的なストレージ・クラスを持つ
変数と同等ではない変数は、以下の場合、明示的なストレージ・クラスを持ちます。
- リストを持たない SAVE ステートメントが有効範囲単位に存在する
- 変数がメインプログラムの指定部分で宣言されている
- 暗黙
変数が明示的なストレージ・クラスを持たない場合、次のような暗黙の
ストレージ・クラスが割り当てられます。
- IMPLICIT STATIC ステートメントに指定される英字、ドル記号、
下線のいずれかによってその名前が始まる変数は、static のストレージ・クラスを持ちます。
- IMPLICIT AUTOMATIC ステートメントに指定される英字、ドル記号、
下線のいずれかによってその名前が始まる変数は、automatic のストレージ・クラスを持ちます。
特定の有効範囲単位内で、英字、ドル記号、下線のいずれか
が IMPLICIT STATIC ステートメントまた
は IMPLICIT AUTOMATIC ステートメントに指定されていない場合、
暗黙のストレージ・クラスはホストと同じになります。
モジュールの指定部分で宣言された変数は、静的ストレージ・クラスに関連させられます。
上記のいずれにも該当しない変数で、暗黙のストレージ・クラスを持つ変数と
同等なものは、暗黙のストレージ・クラスを継承します。
- デフォルト
それ以外の変数はすべて、デフォルトのストレージ・クラスを持ちます。
+------------------------------End of IBM 拡張-------------------------------+
