16.4.2 実行単位の終了コード
COBOLの実行単位が終了するときに返す終了コードについて説明します。
COBOLプログラムから終了コードを返すには,RETURN-CODE特殊レジスタを使用します。また,プログラムが異常終了した場合は,COBOL2002によって終了コードが設定される場合があります。
(1) RETURN-CODE特殊レジスタを使用する方法
呼び出し元の制御プログラムに終了コードを返すには,プログラムが終了する前にRETURN-CODE特殊レジスタに値を設定します。
- 指定例
MOVE 0 TO RETURN-CODE.
- 規則
-
-
RETURN-CODE特殊レジスタに設定できる値の範囲は,S9(9)の項目に設定できる値の範囲です。ただし,VOS3 COBOL85との動作と互換性を保つ必要がある場合は,0〜4,095の範囲で設定してください。
-
終了コードの値は,プログラム終了時にRETURN-CODE特殊レジスタに設定されている値になります。ただし,COBOLプログラム中でRETURN-CODE特殊レジスタに値を設定した後,RETURNING指定のないCALL文を実行した場合は,呼び出し先プログラムの戻り値が終了コードとなります。
-
RETURN-CODE特殊レジスタに値を設定しないで,COBOLプログラムが正常終了した場合は,終了コードとして0が返されます。ただし,COBOLプログラムから他言語のプログラムを呼び出している場合,呼び出し先プログラムの戻り値※が終了コードに設定されます。
- 注※
-
void型のC言語プログラムを最後に呼び出すと,終了コードの値が不定となることがあります。
-
(2) プログラムが異常終了した場合の終了コード
プログラムが異常終了した場合,COBOL2002が終了コードを設定する場合があります。
- COBOL実行時エラーが発生した場合
-
終了コードには1が設定されます。
- CBLABNサービスルーチンが実行された場合
-
環境変数CBLABNCODEにYESが指定されている場合は,終了コードにはCBLABNサービスルーチンの引数が設定されます。
環境変数CBLABNCODEにYES以外が指定されている場合は,終了コードには1が設定されます。
- 上記以外のエラーが発生した場合
-
-
-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,または-DebugRangeオプション指定ありのCOBOLプログラムのとき
終了コードには,1が設定されます。
ただし,環境変数CBLEXCEPT=THROWを指定したときは,システムが返す値が設定されます。
-
上記のコンパイラオプション指定なしのCOBOLプログラムのとき
終了コードにはシステムが返す値が設定されます。
-
(3) 注意事項
-
COBOLプログラムが上位プロセスから起動される場合や,プログラム内でソフトウェアやハードウェアによって検出されて発生した例外を処理するプログラムがある場合,プログラムの終了コードは,それぞれ上位プロセス,および例外処理プログラムの戻り値となるため,(1)(2)の規則は適用されません。次に,(1)(2)の規則が適用されない例を示します。
-
テストデバッガのコマンド起動で,COBOLプログラムを実行した場合
(例)cbltd2k -Execute sample.exe
-
Window問題レポートでエラー情報を診断した場合
-