ALLOCATE ステートメントは、プロシージャー・ブロックの境界とは 関係なく、被制御変数にストレージを割り振ります。 同時に、被制御パラメーターも割り振ることができます。 制御されている配列の境界、制御ストリングの長さ、 制御域のサイズは、その初期値と同様に ALLOCATE ステートメントで 指定することができます。
省略形: ALLOC
被制御変数と基底付き変数の両方を、同一の ALLOCATE ステートメントで 割り振ることができます。 基底付き変数の構文については、基底付き変数のための ALLOCATE ステートメントを参照してください。
配列の境界、ストリングの長さ、 および区域のサイズ (エクステント) は、 ALLOCATE ステートメントの実行時に計算されます。
declare X(N) fixed bin ctl; N = 20; allocate X; allocate X(X(1));
X の最初の割り振りでは、 DECLARE ステートメントと N = 20; で、上限が指定されます。 2 番目の割り振りでは、 X の最初の世代の最初のエレメントの値によって、 上限が指定されます。
次元属性は、宣言したものと同じ次元数を指定しなければなりません。 次元属性は他の任意の属性とともに指定することができ、指定する属性の最初のものでなければなりません。 以下に例を示します。
declare X(M) char(N) controlled; M = 20; N = 5; allocate X(25) char(6);
BIT、CHARACTER、GRAPHIC、WIDECHAR、および AREA 属性は、 同じ属性を持つ変数についてのみ、それぞれ指定することができます。
変数が DECLARE または ALLOCATE ステートメントのいずれかに INITIAL 属性を持つ場合は、 初期値は割り振り時に変数に割り当てられます。 INITIAL 属性の式または CALL オプションは、 ALLOCATE ステートメントで使用可能な条件を使用して、 割り振り時に計算されます。 ただし、名前は宣言の環境で解釈されます。 INITIAL 属性が DECLARE と ALLOCATE ステートメントの両方に指定される場合は、ALLOCATE ステートメントの INITIAL 属性が使用されます。 初期設定時に、割り振られる変数が参照されている場合、その変数の 新しい世代を参照することになります。 初期設定の詳細については、INITIAL 属性を参照してください。
ALLOCATE ステートメントの実行時に行われる計算 (例えば、INITIAL 属性内の式の計算) は、相互に依存し合ってはなりません。
被制御変数のためのストレージが使用可能ではない場合、STORAGE 条件が発生します。