21.8.3 例外処理の動作
共通例外処理では,例外の検出された要因,および例外処理の指定有無によって,実行される処理が異なります。それぞれの場合の処理について,「表21‒13 手続き文で検出された例外」,「表21‒14 RAISE文によって引き起こされた例外」,および「表21‒15 例外の伝播によって検出された例外」に示します。
なお,TURN指令のチェックがONの場合の動作は,表の左から順にチェックされ,該当するものが実行されます。
例外の 致命度 |
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
-
実行継続の詳細については,各文の一般規則を参照してください。
例外の 致命度 |
該当する宣言手続きがある※1 |
PROPAGATE指令がON |
例外処理なし |
---|---|---|---|
致命的 |
該当する宣言手続きを実行したあと,エラーメッセージ(KCCC0015R-S)を出力し,実行単位が異常終了※2 |
例外を伝播 |
エラーメッセージ(KCCC0401R-S)を出力し,実行単位が異常終了 |
非致命的 |
該当する宣言手続きを実行し,RAISE文の次の文から実行を継続 |
RAISE文の次の文から実行を継続 |
RAISE文の次の文から実行を継続 |
- 注※1
-
宣言手続きからの復帰が実行されない場合です。
- 注※2
-
致命的な例外のうち,入出力に分類される例外(例外名EC-I-O)については,実行が継続されます。
例外の 致命度 |
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文,および利用者定義関数を呼び出した文の次の文を指します。