プログラムが最後に使用された状態になるのかまたは初期状態になるのか、および戻り先がどの呼び出し元になるのかは、使用するステートメントにより異なる可能性があります。
メインプログラムまたはサブプログラムで 3 つの終了ステートメントのいずれを使用することもできますが、次の表に示すように、 その影響がそれぞれ異なります。
| 終了ステートメント | メインプログラム | サブプログラム |
|---|---|---|
| EXIT PROGRAM | アクションはとられません。 | 実行単位を終了せずに呼び出し側プログラムに戻ります。呼び出されるプログラムの中に次に実行可能なステートメントがない場合、暗黙の EXIT PROGRAM ステートメントが生成されます。 スレッド化された環境では、そのプログラムがスレッド内の最初の (最も古い) プログラムでない限り、スレッドは終了しません。 |
| STOP RUN | 呼び出し側プログラムに戻ります。
1 (オペレーティング・システムに戻る可能性があり、アプリケーションは終了します。)
STOP RUN は実行単位を終了して、実行単位内で動的に呼び出されたプログラムと、それらとリンク・エディットされたすべてのプログラムを削除します。(メインプログラムは削除しません。) スレッド化された環境では、言語環境プログラム・のエンクレーブ全体 (そのエンクレーブ内で実行中のすべてのスレッドを含む) が終了します。 |
メインプログラムを呼び出したプログラムに直接戻ります。
1 (オペレーティング・システムに戻る可能性があり、アプリケーションは終了します。) STOP RUN は実行単位を終了して、実行単位内で動的に呼び出されたプログラムと、それらとリンク・エディットされたすべてのプログラムを削除します。(メインプログラムは削除しません。) スレッド化された環境では、言語環境プログラム・のエンクレーブ全体 (そのエンクレーブ内で実行中のすべてのスレッドを含む) が終了します。 |
| GOBACK | 呼び出し側プログラムに戻ります。
1 (オペレーティング・システムに戻る可能性があり、アプリケーションは終了します。)
GOBACK は実行単位を終了して、実行単位内で動的に呼び出されたプログラムと、それらとリンク・エディットされたすべてのプログラムを削除します。(メインプログラムは削除しません。) スレッド化された環境では、スレッドが終了します。2 |
呼び出し側プログラムに戻ります。 スレッド化された環境では、そのプログラムがスレッド内の最初のプログラムであると、スレッドが終了します。2 |
|
||
サブプログラムは通常、EXIT PROGRAM または GOBACK で 終了されると、最後に使用された状態になります。 サブプログラムが実行単位の中で次に呼び出されると、PERFORM ステートメントの戻り値が初期値にリセットされることを除けば、その内部値は終了時のまま残されます(それに対して、メインプログラムは呼び出されるたびに初期化されます)。
プログラムが初期状態になるのは、次のような場合です。
関連概念
WORKING-STORAGE と LOCAL-STORAGE の比較
言語環境プログラム プログラミング・ガイド (言語環境プログラム終了:
スレッド終了)