導入:なぜ今さら「EXIT PROGRAM」なのか
COBOL開発において、処理の終了や制御の戻し方はプログラムの信頼性に直結します。特に「サブプログラムから呼び出し元へ戻る」という基本動作は、適切に行わないと予期せぬ終了やメモリリークの原因となります。今回は、メインプログラムとサブプログラムの境界を意識するための重要命令「EXIT PROGRAM」について解説します。
基礎知識:EXIT PROGRAMの役割
COBOLにおいてプログラムを終了させる命令には、大きく分けて「STOP RUN」と「EXIT PROGRAM」があります。
STOP RUNは「実行単位(RUN UNIT)」そのものを終了させる強力な命令です。一方、EXIT PROGRAMは、呼び出されたサブプログラムの処理を終了し、呼び出し元のCALL文の直後の命令へ制御を戻すための命令です。メインプログラム(最上位)で実行した場合はSTOP RUNと同様に動作しますが、設計の意図を明確にするために、サブプログラム内でのみ使用するのがプロの作法です。
実装と解決策:制御の戻し方
サブプログラムを作成する際は、EXIT PROGRAMに到達するように論理パスを組む必要があります。注意すべき点は「呼び出し元に制御を戻す」という動作です。呼び出し元は、サブプログラムが終了したことをCALL文の戻り値等で判断するため、EXIT PROGRAMを実行する直前に、適切な状態コードをデータ項目にセットしておくのが現場の鉄則です。
サンプルプログラム
以下のコードは、呼び出し元のメインプログラムと、EXIT PROGRAMで制御を戻すサブプログラムの構成例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBPROG.
DATA DIVISION.
LINKAGE SECTION.
01 WS-STATUS PIC 9(01).
PROCEDURE DIVISION USING WS-STATUS.
- 正常終了のコードをセットする
MOVE 0 TO WS-STATUS.
DISPLAY “サブプログラム: 処理完了、呼び出し元へ戻ります。”.
- 制御を呼び出し元に戻す
EXIT PROGRAM.
END PROGRAM SUBPROG.
IDENTIFICATION DIVISION.
PROGRAM-ID. MAINPROG.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STATUS-CODE PIC 9(01).
PROCEDURE DIVISION.
DISPLAY “メイン: サブプログラムを呼び出します。”.
CALL “SUBPROG” USING STATUS-CODE.
- CALL文の次の命令から再開される
DISPLAY “メイン: 戻りました。終了コード: ” STATUS-CODE.
STOP RUN.
END PROGRAM MAINPROG.
応用・注意点:現場で役立つアドバイス
実務で最も注意すべきは「EXIT PROGRAMを実行し忘れる」ことです。プログラムの末尾に到達しただけで終了したとみなされるコンパイラもありますが、可読性と保守性を高めるため、終了地点には必ずEXIT PROGRAMを明示してください。
また、複数のEXIT PROGRAMが存在する複雑なロジックでは、終了直前のデータ状態が呼び出し元にどう影響するかを確認しましょう。特に、再帰呼び出しや動的リンクを行う環境では、EXIT PROGRAMの挙動がシステム全体の安定性に影響を与えることを忘れないでください。

コメント