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

自動ストレージとその属性

自動変数は、それが宣言されているブロックに制御が移されたときに 割り振られます。 自動変数の割り振りは、プログラムの実行中に何回も行うことができます。 ユーザーは、プログラムのブロック構造体をどのように設計するかによって、自動変数の割り振りを制御することができます。

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

省略形: AUTO

AUTOMATIC はデフォルトです。 自動変数は常に内部変数です。

以下の例では、 プロシージャー B が呼び出されるたびに、 変数 XY は ストレージを割り振られます。 B が終了するとストレージが解放され、 X および Y に入っていた値は失われます。

A: proc;

·
·
·
call B; B: proc; declare X,Y auto;
·
·
·
end B;
·
·
·
call B;

解放されたストレージは、別の変数への割り振りのために使用可能になります。 このように、ブロック (プロシージャー・ブロックまたは開始ブロック) がアクティブである間は、 そのブロック内で AUTOMATIC と宣言されたすべての変数にストレージが割り振られています。 ブロックが非アクティブであれば、そのブロック内の自動変数にストレージは 割り振られていません。 再帰的に呼び出されるか、または複数のプログラムによって呼び出される プロシージャーを除いて、個々の自動変数の割り振りは 1 つだけ存在することができます。

自動変数のエクステントは、式で指定することができます。 したがって、必要なときに、特定量のストレージを割り振ることができます。 次の例では、文字ストリング STR の長さは、プロシージャー B が 呼び出されたときに存在していた変数 N の値によ って定義された長さになります。

A: proc;
declare N fixed bin;

·
·
·
B: proc; declare STR char(N);

DECLARE ステートメントが同じブロック内にある場合、 PL/I は変数 N を制限付き式 または初期設定済みの静的変数のいずれかに 初期設定しておかなければなりません。 次の例では、割り振られた長さは Str1 に対して正しく割り振られます が、Str2 には正しくありません。 PL/I では、このタイプの宣言の依存性は 解決できません。

dcl N fixed bin (15) init(10),
M fixed bin (15) init(N),
Str1 char(N),
Str2 char(M);


Terms of use | Feedback

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