CALL文,INVOKE文,および利用者定義関数によって呼び出されたプログラム(例外を送る側)で例外が発生し,呼び出し元プログラム(例外を受け取る側)へ例外の伝播を実行しようとしても,呼び出し元プログラムが例外を受け取れない場合,例外は伝播しません。
例外を受け取れる呼び出し元プログラム,例外を受け取れない呼び出し元プログラムの条件を次に示します。
条件 | プログラム種別/指定 | |||||||
---|---|---|---|---|---|---|---|---|
COBOL 85 | COBOL2002 | COBOL 以外の言語 | ||||||
-Compati85,NoPropagate指定なし※1 | -Compati85,NoPropagate指定あり※1 | |||||||
伝播抑止条件※2 | 左記以外 | 伝播抑止条件※2 | 左記以外 | |||||
例外を受け取る文 | オブジェクト指向のINVOKE文 | - | × | ○ | × | × | - | |
利用者定義関数を参照する文 | - | × | ○ | × | × | - | ||
CALL文 | 無条件指定なし※3 | × | × | ○ | × | × | - | |
無条件指定あり※3 | × | ○※4 | ○ | × | × | - |
呼び出し元プログラムが例外を受け取れない場合,呼び出し先プログラムで例外が検出されたときの動作が異なります。
例外が検出されたときの動作の詳細については,「21.8.3 例外処理の動作」を参照してください。
例外を受け取れないプログラムへ例外の伝播を実行しようとした場合の例を次に示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE1.
:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PARAM USAGE COMP-1 VALUE +9.9E+01.
:
PROCEDURE DIVISION.
CALL 'SAMPLE2' USING PARAM. *> 1.
END PROGRAM SAMPLE1.
>>PROPAGATE ON
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE2.
:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ANS USAGE COMP-1.
01 DATA-A PIC X(21) VALUE '100300700800400600900'.
01 DATA-B REDEFINES DATA-A.
02 DATA-C PIC 9(3) OCCURS 7 TIMES
INDEXED BY DATA-D DATA-E.
LINKAGE SECTION.
01 PARAM USAGE COMP-1.
:
PROCEDURE DIVISION USING PARAM.
SET DATA-D DATA-E TO 0.
>>TURN EC-RANGE-SEARCH-INDEX CHECKING ON
SEARCH DATA-C VARYING DATA-E *>2.
WHEN DATA-C(DATA-E) > 1500
CONTINUE
END-SEARCH.
>>TURN EC-ARGUMENT-FUNCTION CHECKING ON
COMPUTE ANS = FUNCTION ACOS ( PARAM ). *> 3.
DISPLAY 'ANSWER =' ANS.
END PROGRAM SAMPLE2.