AUTOMATIC

文と属性:副プログラム中の変数の記憶域割付けを制御します (STATIC として)。AUTOMATIC として宣言され,メモリーに割り当てられた変数は,スタティック・メモリー位置ではなくスタック記憶領域に置かれます。

AUTOMATIC 属性は,型宣言文か,AUTOMATIC 文で指定することができ,以下のいずれかの形式を取ります。

形式

型宣言文

type, [att-ls,] AUTOMATIC [,att-ls] :: v [,v]...

AUTOMATIC v [,v]...

type
データ型指定子。

att-ls
省略可能な属性指定子の並び。

v
変数または配列指定の名前。任意の型を持つことができます。

規則と振る舞い

AUTOMATIC 宣言は,記憶域にデータがどのように割り付けられるかという点にのみ影響を与えます。

副プログラムに再入したときに,変数の定義が残っているようにするには,SAVE 属性を使用する必要があります。

自動変数を使用すると,その時点で使用されている変数だけがメモリーに割り付けられるようになるため,メモリーを節約することができます。

自動変数を使うと再帰が可能になります。再帰では,副プログラムは自分自身を (直接または間接に) 呼び出し,結果として得られた値を,その後の呼び出しや,副プログラムに帰ったときに利用することができます。再帰を行うためには,以下のいずれかの方法で RECURSIVE を指定する必要があります。

基本設定では,コンパイラは,割付け配列を除く非再帰的副プログラムの局所変数を,スタティック記憶域に割り付けます。変数がその使用前につねに定義されていることにコンパイラが気づいた場合,変数を一時的 (スタックまたはレジスタ) 記憶域に割り付けることがあります。SAVE 属性を適切に使用すれば,変数が定義前に使用されたときに生じるコンパイラの警告を防ぐことができます。

変数の基本設定を変更するには,変数を AUTOMATIC として指定するか,(上で述べたいずれかの方法で) RECURSIVE を指定します。

変数に影響を与える可能性のあるコンパイラ・オプションを無効にするには,変数を明示的に AUTOMATIC として指定します。


注意:データとして初期化された変数と,COMMON および SAVE 文に含まれる変数は,つねにスタティックです。これはコンパイラ・オプションが再帰を指定しているかどうかとは関係ありません。

同じ有効域で,1 つの変数を 2 度以上 AUTOMATIC として指定することはできません。

変数がポインタである場合,AUTOMATIC はポインタそのものにのみ適用され,結合されている指示先には適用されません。

一部の変数は AUTOMATIC として指定できません。次の表にこれらの制約を示します。

変数 AUTOMATIC
仮引数 いいえ
自動割付けオブジェクト いいえ
共通ブロック項目 いいえ
参照結合項目 いいえ
関数結果 いいえ
構造型の成分 いいえ

変数がモジュールの有効範囲外にある場合,AUTOMATIC として指定できません

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

OPTIONSPOINTERRECURSIVE/recursiveSAVESTATIC型宣言文属性の互換性モジュールとモジュール手続

以下の例は,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 です。