COBOL2002 ユーザーズガイド


18.3.2 COBOLプログラムを副プログラムとして動作させる場合

18.3.1 COBOLプログラムを主プログラムとして動作させる場合」に示したように,実行中のプロセス内で初めて呼ばれたCOBOLプログラム(COBOL主プログラム)でGOBACK文を実行した場合,STOP RUN文と同じ動作となり,プロセスが終了するため,呼び出し元のプログラムに制御が戻りません。このため,COBOL主プログラムを呼び出したプログラム(C言語の主プログラムなど)がCOBOLプログラムから復帰したあとの処理を継続できなくなります。

このような場合,-MainNotCBLオプションを指定してCOBOLプログラムをコンパイルすると,実行中のプロセス内で初めて呼ばれたCOBOLプログラムをCOBOL副プログラムとみなし,GOBACK文またはEXIT PROGRAM文を実行したときでも呼び出し元のプログラムに復帰できます。

また,-MainNotCBLオプションを指定すると,他言語のプログラムからCOBOLプログラムを繰り返し呼び出す場合のCOBOL初期処理/終了処理の負荷を軽減できます。

-MainNotCBLオプションを指定した場合のCOBOLプログラムの動作を,次に示します。

[図データ]

上記の場合,最初に呼ばれるCOBOLプログラムAP1に-MainNotCBLオプションを指定しているので,以降に呼ばれるCOBOLプログラムは,すべてCOBOL副プログラムとして動作します。そのため,この実行環境内ではGOBACK文やEXIT PROGRAM文が有効となり,COBOLプログラムの呼び出し元へ制御が戻るため,復帰後の処理ができます。

〈この項の構成〉

(1) COBOLプログラムの資源

COBOLプログラムが呼び出し元のプログラムに戻っても,COBOLの実行環境は解除されません。このため,INITIAL句を指定していないCOBOLプログラムか,またはCANCEL文で取り消されていないCOBOLプログラムは,以前に呼ばれた状態を保持しています。保持している情報は,通常属性プログラムがほかのプログラムから2回以上呼び出された場合の規則に従います。詳細は,「18.4.1 プログラム属性」の「(1) 通常属性プログラム」を参照してください。

(2) COBOL実行環境の終了方法

利用者プログラムは,COBOLプログラムの呼び出しが完了し,以降は呼び出しをしない状態になったとき,次の方法で実行環境を終了します。

(3) 注意事項

-MainNotCBLオプションを指定する場合,該当する実行可能ファイル中に含まれるすべてのCOBOLプログラムを-MainNotCBLオプション指定でコンパイルする必要があります。-MainNotCBLオプションを指定したプログラムと指定していないプログラムが混在するときは,実行環境中で最初に呼ばれたプログラムの-MainNotCBLオプションの有無に従います。