Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.9, 言語解説書

被制御ストレージとその属性

被制御変数のための ALLOCATE ステートメント
被制御変数のための FREE ステートメント
被制御変数の複数世代
アスタリスクの表記法
調節可能エクステント
被制御変数のための組み込み関数

CONTROLLED として宣言された変数は、ALLOCATE ステートメントで指定されたと きにだけ割り振られます。 被制御変数は、その変数を指定している FREE ステートメントに制御権が到達する か、またはプログラムが終了するまで、割り振られたままになっています。

被制御変数は、プログラムのブロック構造体から、部分的に独立しています (ただ し、完全に無関係というわけではありません)。 被制御変数の有効範囲は、INTERNAL または EXTERNAL のいずれでもかまいません。 INTERNAL と宣言されている場合の有効範囲は、その変数を宣言しているブロッ クと、そのブロックに含まれているブロックです。 まだ割り振られていない被制御変数を参照すると、エラーになります。

CONTROLLED として宣言されていない変数は、CONTROLLED として変数を宣言しているプロシージャーに渡すことはできません。 しかし、CONTROLLED として宣言されている変数を、CONTROLLED として変数を宣言していないプロシージャーに渡すことはできます。

構文図を読む構文図をスキップする>>-CONTROLLED--------------------------------------------------><
 

省略形: CTL

以下の例では、変数 X はプロシージャー B 内と、プ ロシージャー A の CALL ステートメントの実行に続く部分内で有 効に参照することができます。

A: proc;
dcl X controlled;
call B;

·
·
·
B: proc; allocate X;
·
·
·
end B; end A;

一般に、被制御変数が有用なのは、調整可能なエクステントを持つ大きなデータ集合がプログラムに必要なときです。 次の例のステートメントは、入力データに応じて必要なだけのストレージを割り振 り、不要になったときにそのストレージを解放します。

  dcl A(M,N) ctl;
  get list(M,N);
  allocate A;
  get list(A);

·
·
·
free A;

この方法を採用すると、ブロックを活動化したり終了したりする必要がないので、開始ブロックを設ける方法よりも効率がよくなります。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)