z/OS PL/I CONTROLLED変数は、プロシージャーの別々の呼び出しの間に保持されますか?サブルーチンの内部にあり、呼び出し全体で保持されているカウンタが必要であるとしましょう。これを行う最も簡単な方法は、ゼロに初期化され、サブルーチンへの各エントリでインクリメントされた静的変数を使用することです。しかし、プログラムがリエントラントでなければならない場合は、それを行うことはできません。したがって、問題は、以前の呼び出しで割り当てられた制御変数にアクセスできるかどうかです。次のコードは動作しますか? PL/I言語リファレンスによると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;
、変数をALLOCATEした後、あなたはすべての制御ストレージはの終わりに解放される」(つまり、一般的に良い習慣ですが)、それを解放する必要はありません。プログラム "と呼ばれています。ブロックの最後にストレージが解放されたとは言いません。 「PL/Iプログラミング・ガイド」では、「制御変数の位置指定」の「PLIDUMPの使用」の章にいくつかの手掛かりがありますが、確定的ではありません。制御変数を見つけるための鍵は、そのアンカーを見つけることです。 NORENT WRITABLEでは、静的記憶域にアンカーがあります。 NORENT NOWRITABLE(FWS)には、アンカー自動ストレージへのアドレスがあります。 NORTH NOWRITABLE(PRV)では、制御された各変数のプライベートテーブルにオフセットを持つ静的テーブルがあるようです。言い換えれば、処理オプションによっては、変数がアクセス可能である可能性があり、そうでない可能性があります。 RENTオプションの使用については何も言及していません。 考えていますか?
これは、一般的な原則/アーキテクチャではなく特定のコーディングの問題をカバーするため、スタックオーバーフローでよりよく適合します。 –
私の無知を許しますが、このコードはどの言語ですか?私はかなり古いものを想定していますが、それは何か分かりません。 – Bojangles
言語はPL/Iです。 – zarchasmpgmr