3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

COBOLの戻り文

Last updated at Posted at 2019-06-06

研修で使い方を間違えたのでおさらいついでに記事化。

戻り文とは

プログラムを終了させたり、サブルーチンやサブセクションの呼び出し元に戻るための構文。

COBOLの戻り文は3種類

まずはざっくりと説明。

STOP RUN

プログラムを終了させるときに使う。そのため、サブセクションやサブプログラムで使ってしまうと、呼び出し元に戻ることなく、実行した時点で終了してしまう。

GOBACK

サブプログラムからメインプログラム(サブプログラムの呼び出し元)に戻るための構文。

EXIT

一連の手続きの共通の終了点で、PERFORM、パラグラフ、セクションの出口としても利用可能。

使い方

STOP RUNはプログラムを完全に終了させたいとき、GOBACKはサブプログラムを終了してメインプログラムに戻りたいとき、EXITはサブセクションの呼び出し元に戻りたいときに使う。

MAIN.cbl
*--メインプログラム
 IDENTIFICATION  DIVISION.
*
 PROGRAM-ID.     MAIN.
*
 ENVIRONMENT     DIVISION.
*
 DATA            DIVISION.
*
 PROCEDURE       DIVISION.
*--メインセクション
 MAIN-SEC        SECTION.
 MAIN-SEC-S.
   CALL          'SUB-PGM'.
   PERFORM       SUB-SEC.
   DISPLAY       '!!!'.
 MAIN-SEC-E.
 STOP            RUN.
*--サブセクション
 SUB-SEC         SECTION.
 SUB-SEC-S.
   DISPLAY       'WORLD'.
 SUB-SEC-E.
   EXIT.
SUB.cbl
*--サブプログラム
 IDENTIFICATION  DIVISION.
 PROGRAM-ID.     SUB-PGM.
*
 ENVIRONMENT     DIVISION.
*
 DATA            DIVISION.
*
 PROCEDURE       DIVISION.
   DISPLAY       'HELLO'.
   GOBACK.

実行結果

HELLO
WORLD
!!!

上記のプログラムで誤った使い方を考えてみる。

1. サブプログラムのGOBACKSTOP RUN

実行結果

HELLO

STOP RUN.は、プログラムを終了するもので、メインプログラムに戻ることなく、呼ばれた時点で完全に終了してしまう。言うまでもないが、サブセクションで呼べば、今回の場合だとWORLD!!!が出ない。

2. サブセクションのEXIT.GOBACK.

実行結果

HELLO
WORLD

GOBACK.はサブプログラムからメインプログラムに戻るための構文であり、メインプログラムで実行すると、これの前がないので、結局はSTOP RUN.と同じ役目を果たす。なので、メインセクションに戻ることなく終了してしまう。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?