COBOL2002 使用の手引 手引編


21.8.3 例外処理の動作

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

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

表21‒13 手続き文で検出された例外

例外の

致命度

TURN指令のチェックがOFF

TURN指令のチェックがON

該当する宣言手続きがある※1

PROPAGATE指令がON

例外処理なし

呼び出し元が例外を受け取れないプログラム※2

左記以外

致命的

実行時エラー

または

実行を継続※3

該当する宣言手続きを実行したあと,エラーメッセージ(KCCC0015R-S)を出力し,実行単位が異常終了※4

エラーメッセージ(KCCC0403R-S)を出力し,実行単位が異常終了

例外を伝播

エラーメッセージ(KCCC0401R-S)を出力し,実行単位が異常終了

非致命的

実行を継続※5

該当する宣言手続きを実行し,次の文から実行を継続

実行を継続※5

実行を継続※5

実行を継続※5

注※1

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

注※2

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

注※3

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

注※4

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

注※5

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

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

例外の

致命度

該当する宣言手続きがある※1

PROPAGATE指令がON

例外処理なし

致命的

該当する宣言手続きを実行したあと,エラーメッセージ(KCCC0015R-S)を出力し,実行単位が異常終了※2

例外を伝播

エラーメッセージ(KCCC0401R-S)を出力し,実行単位が異常終了

非致命的

該当する宣言手続きを実行し,RAISE文の次の文から実行を継続

RAISE文の次の文から実行を継続

RAISE文の次の文から実行を継続

注※1

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

注※2

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

表21‒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文,および利用者定義関数を呼び出した文の次の文を指します。