17.2.1 復帰コードと返却項目の使用方法
復帰コードと返却項目の使用方法について説明します。
- 〈この項の構成〉
(1) 返却項目の規則
- 規則
-
-
呼び出し元プログラムと呼び出し先プログラムが両方ともCOBOLプログラムの場合,呼び出し先プログラムで手続き部見出しのRETURNINGに指定したデータ項目の値が,呼び出し元プログラムのCALL文RETURNINGに指定したデータ項目に格納されます。このとき,CALL文のRETURNING指定のデータ項目と,呼び出し先プログラムの手続き部見出しのRETURNING指定のデータ項目の長さ,および用途は同じでなければなりません。同じでない場合,動作は保証しません。
-
呼び出し先プログラムで手続き部見出しのRETURNINGのデータ項目に設定された戻り値は,呼び出し元プログラムのRETURN-CODE特殊レジスタでは参照できません。同様に,呼び出し先プログラムのRETURN-CODE特殊レジスタに設定された復帰コードは,呼び出し元プログラムのRETURNING指定のデータ項目では参照できません。
-
呼び出し元プログラムと呼び出し先プログラムのRETURNINGに指定されたデータ項目の型が異なってはなりません。
-
RETURNINGでデータ項目に可変長項目を設定した場合,常に最大長のデータが返却項目として受け渡されます。
-
- 返却項目の受け渡しの例
-
CALL文のRETURNING指定による返却項目の受け渡しの例を次に示します。
- 呼び出し元プログラム
WORKING-STORAGE SECTION. 01 RTC PIC S9(9) USAGE COMP. PROCEDURE DIVISION. : CALL 'SAMPLE1' RETURNING RTC. IF RTC = 12345 THEN :
- 呼び出し先プログラム
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. : LINKAGE SECTION. 01 RTC PIC S9(9) USAGE COMP. PROCEDURE DIVISION RETURNING RTC. : MOVE 12345 TO RTC. EXIT PROGRAM.
(2) 復帰コードの規則
COBOLプログラムでは,RETURN-CODE特殊レジスタに値を設定することで,C言語のプログラムのように復帰コードを設定できます。復帰コードの規則について,次に示します。
(a) 復帰コードの設定方法
呼び出し先プログラムでRETURN-CODE特殊レジスタに値を設定できます。
呼び出し先プログラムで復帰コードに0を設定する例を,次に示します。
- (呼び出し先プログラムがCOBOLプログラムの場合)
MOVE 0 TO RETURN-CODE.
- (呼び出し先プログラムがCプログラムの場合)
return(0);
(b) 復帰コードの値
-
RETURN-CODE特殊レジスタに設定できる値の範囲は,S9(9)の項目に設定できる値の範囲です。
-
ただし,このシステムで受け取れるRETURN-CODE特殊レジスタの値は,下位1バイト(8ビット)の内容です。
-
VOS3 COBOL85との動作と互換性を保つ必要がある場合は,RETURN-CODE特殊レジスタには,0〜4,095の範囲で設定してください。
-
RETURN-CODE特殊レジスタには,初回の呼び出しのときに初期値0が設定されます。このため,RETURN-CODE特殊レジスタを使用しないで正常終了したときは,復帰コードには0が設定されています。
(c) 復帰コードの参照方法
呼び出し先プログラムでRETURN-CODE特殊レジスタに設定された復帰コードを,呼び出し元プログラムで参照する方法を,次に示します。
- COBOLプログラムの場合
-
ほかのプログラムから制御が戻ってきたとき,呼び出し先プログラムで設定したRETURN-CODE特殊レジスタの値を参照できます。
- (例)
CALL 'SAMPLE1'. IF RETURN-CODE = 20 THEN :
- Cプログラムの場合
-
復帰コードは,関数の戻り値として参照できます。
- (例)
int rtn_value; : rtn_value = SAMPLE1(); if (rtn_value == 20) {
(d) 注意事項
-
RETURN-CODE特殊レジスタの値は,Cプログラムとの混在がなく,呼び出し元以降にCALL文,INVOKE文,およびRETURN-CODE特殊レジスタの値の設定処理がない場合,COBOL主プログラムまで引き継がれます。
-
呼び出し元プログラムがCOBOLプログラム,呼び出し先プログラムがCプログラムの場合,復帰コードに設定できる値と参照できる値の範囲が次のように異なるので注意が必要です。
- Cプログラムで設定できる戻り値
-
int型の変数に設定できる値の範囲が,戻り値として指定できます。
- COBOLプログラムがRETURN-CODE特殊レジスタで参照できる値の範囲
-
S9(9) COMPで表現できる範囲が,RETURN-CODE特殊レジスタで参照できます。