文と属性:副プログラム中の変数の記憶域割付けを制御します (STATIC として)。AUTOMATIC として宣言され,メモリーに割り当てられた変数は,スタティック・メモリー位置ではなくスタック記憶領域に置かれます。
AUTOMATIC 属性は,型宣言文か,AUTOMATIC 文で指定することができ,以下のいずれかの形式を取ります。
形式
型宣言文
type, [att-ls,] AUTOMATIC [,att-ls] :: v [,v]...
文
AUTOMATIC v [,v]...
type
データ型指定子。
att-ls
省略可能な属性指定子の並び。
v
変数または配列指定の名前。任意の型を持つことができます。
規則と振る舞い
AUTOMATIC 宣言は,記憶域にデータがどのように割り付けられるかという点にのみ影響を与えます。
副プログラムに再入したときに,変数の定義が残っているようにするには,SAVE 属性を使用する必要があります。
自動変数を使用すると,その時点で使用されている変数だけがメモリーに割り付けられるようになるため,メモリーを節約することができます。
自動変数を使うと再帰が可能になります。再帰では,副プログラムは自分自身を (直接または間接に) 呼び出し,結果として得られた値を,その後の呼び出しや,副プログラムに帰ったときに利用することができます。再帰を行うためには,以下のいずれかの方法で RECURSIVE を指定する必要があります。
FUNCTION または SUBROUTINE 文の中のキーワードとして
コンパイラ・オプションとして
OPTIONS 文中のオプションとして
基本設定では,コンパイラは,割付け配列を除く非再帰的副プログラムの局所変数を,スタティック記憶域に割り付けます。変数がその使用前につねに定義されていることにコンパイラが気づいた場合,変数を一時的 (スタックまたはレジスタ) 記憶域に割り付けることがあります。SAVE 属性を適切に使用すれば,変数が定義前に使用されたときに生じるコンパイラの警告を防ぐことができます。
変数の基本設定を変更するには,変数を AUTOMATIC として指定するか,(上で述べたいずれかの方法で) RECURSIVE を指定します。
変数に影響を与える可能性のあるコンパイラ・オプションを無効にするには,変数を明示的に AUTOMATIC として指定します。
同じ有効域で,1 つの変数を 2 度以上 AUTOMATIC として指定することはできません。
変数がポインタである場合,AUTOMATIC はポインタそのものにのみ適用され,結合されている指示先には適用されません。
一部の変数は AUTOMATIC として指定できません。次の表にこれらの制約を示します。
変数 | AUTOMATIC |
---|---|
仮引数 | いいえ |
自動割付けオブジェクト | いいえ |
共通ブロック項目 | いいえ |
参照結合項目 | いいえ |
関数結果 | いいえ |
構造型の成分 | いいえ |
変数がモジュールの有効範囲外にある場合,AUTOMATIC として指定できません。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
OPTIONS,POINTER,RECURSIVE,/recursive,SAVE,STATIC,型宣言文,属性の互換性,モジュールとモジュール手続
例
以下の例は,AUTOMATIC 属性を指定する型宣言文を示しています。
REAL, AUTOMATIC :: A, B, C
次の例は,AUTOMATIC 文を示しています。
... CONTAINS INTEGER FUNCTION REDO_FUNC INTEGER I, J(10), K REAL C, D, E(30) AUTOMATIC I, J, K(20) STATIC C, D, E ... END FUNCTION ...
! この例では,プログラム単位中のすべての変数は AUTOMATIC です。 ! ただし,"var1" と "var2" を除きます。 ! これらは,SAVE 文で明示的に宣言されており, ! スタティック・メモリー位置を持っています。 SUBROUTINE DoIt (arg1, arg2) INTEGER(4) arg1, arg2 INTEGER(4) var1, var2, var3, var4 AUTOMATIC SAVE var1, var3 ! "var2" と "var4" は AUTOMATIC です。