z/OS PL/I CONTROLLED 変数は、プロシージャーの個別の呼び出し間で保持されますか? サブルーチンの内部にあり、呼び出し間で保持されるカウンターが必要だとしましょう。これを行う最も簡単な方法は、ゼロに初期化され、サブルーチンへのエントリごとにインクリメントされる静的変数を使用することです。しかし、プログラムが再入可能でなければならない場合、それはできません。問題は、以前の呼び出しで割り当てられた制御変数にアクセスできるかどうかです。次のコードは機能しますか?
PROC1: PROCEDURE OPTIONS(MAIN);
...
CALL A;
...
A: PROCEDURE;
DECLARE COUNT CONTROLLED ALIGNED FIXED BIN(15);
IF (ALLOCATION(COUNT) = 0)
THEN ALLOCATE COUNT INIT(1);
ELSE COUNT = COUNT + 1;
...
END A;
END PROC1;
PL/I 言語リファレンスによると、変数を ALLOCATE した後は変数を解放する必要はなく (ただし、一般的には解放することをお勧めします)、「管理されているすべてのストレージはプログラムの最後に解放されます」。ブロックの最後にストレージが解放されるとは言いません。PL/I プログラミング ガイドの「制御変数の検索」セクションの「PLIDUMP の使用」の章にいくつかの手がかりが示されていますが、決定的なものではありません。制御変数を見つけるための鍵は、そのアンカーを見つけることです。NORENT WRITABLE では、静的ストレージにアンカーがあります。NORENT NOWRITABLE(FWS) には、アンカー自動ストレージへのアドレスがあります。(余分なレベルの間接性があります。) NORENT NOWRITABLE(PRV) を使用すると、制御変数ごとにプライベート テーブルへのオフセットを持つ静的テーブルが存在するように見えます。言い換えると、処理オプションによっては、変数にアクセスできる場合とできない場合があります。RENT オプションの使用については何も述べていません。何かご意見は?