COBOL2002 ユーザーズガイド

[目次][用語][索引][前へ][次へ]

22.8.3 例外処理の動作

共通例外処理では,例外の検出された要因,および例外処理の指定有無によって,実行される処理が異なります。それぞれの場合の処理について,「表22-13 手続き文で検出された例外」,「表22-14 RAISE文によって引き起こされた例外」,および「表22-15 例外の伝播によって検出された例外」に示します。

なお,TURN指令のチェックがONの場合の動作は,表の左から順にチェックされ,該当するものが実行されます。

表22-13 手続き文で検出された例外

例外の
致命度
TURN指令のチェックがOFF TURN指令のチェックがON
該当する宣言手続きがある※1 PROPAGATE指令がON 例外処理なし
呼び出し元が例外を受け取れないプログラム※2 左記以外
致命的 実行時エラー
または
実行を継続※3
該当する宣言手続きを実行したあと,エラーメッセージ(KCCC0015R-S)を出力し,実行単位が異常終了※4 エラーメッセージ(KCCC0403R-S)を出力し,実行単位が異常終了 例外を伝播 エラーメッセージ(KCCC0401R-S)を出力し,実行単位が異常終了
非致命的 実行を継続※5 該当する宣言手続きを実行し,次の文から実行を継続 実行を継続※5 実行を継続※5 実行を継続※5

注※1
宣言手続きからの復帰が実行されない場合です。

注※2
例外を受け取れないプログラムの詳細については,「22.5.3 例外を受け取れないプログラムに例外を伝播させた場合の動作」を参照してください。

注※3
致命的な例外に対するTURN指令のチェックがOFFの場合の動作については,「22.3.3 例外チェックが無効な場合の動作」の「(1) 手続き文の実行中にエラーが発生し,例外を検出した場合」を参照してください。

注※4
致命的な例外のうち,入出力に分類される例外(例外名EC-I-O)については,実行が継続されます。

注※5
実行継続の詳細については,各文の一般規則を参照してください。

表22-14 RAISE文によって引き起こされた例外

例外の
致命度
該当する宣言手続きがある※1 PROPAGATE指令がON 例外処理なし
致命的 該当する宣言手続きを実行したあと,エラーメッセージ(KCCC0015R-S)を出力し,実行単位が異常終了※2 例外を伝播 エラーメッセージ(KCCC0401R-S)を出力し,実行単位が異常終了
非致命的 該当する宣言手続きを実行し,RAISE文の次の文から実行を継続 RAISE文の次の文から実行を継続 RAISE文の次の文から実行を継続

注※1
宣言手続きからの復帰が実行されない場合です。

注※2
致命的な例外のうち,入出力に分類される例外(例外名EC-I-O)については,実行が継続されます。

表22-15 例外の伝播によって検出された例外

例外の
致命度
TURN指令のチェックがOFF TURN指令のチェックがON
該当する宣言手続きがある※1 PROPAGATE指令がON 例外処理なし
致命的 エラーメッセージ(KCCC0402R-S)を出力し,実行単位が異常終了 該当する宣言手続きを実行したあと,エラーメッセージ(KCCC0015R-S)を出力し,実行単位が異常終了※2 例外を伝播 エラーメッセージ(KCCC0401R-S)を出力し,実行単位が異常終了
非致命的※3 次の文から実行を継続※4 該当する宣言手続きを実行し,次の文から実行を継続※4 次の文から実行を継続※4 次の文から実行を継続※4

注※1
宣言手続きからの復帰が実行されない場合です。

注※2
致命的な例外のうち,入出力に分類される例外(例外名EC-I-O)については,実行が継続されます。

注※3
EXIT文,GOBACK文のRAISING指定によって例外が伝播した場合だけが対象です。

注※4
次の文とは,CALL文,INVOKE文,および利用者定義関数を呼び出した文の次の文を指します。