プログラムに呼び出しプロトタイプを使用する場合、データ型に不一致があるとエラーが発生します。このエラーを回避し、CALL 文および USING パラメーターを正しくコーディングするには、呼び出しプロトタイプ内の USING パラメーターのデータ記述項を、このプロトタイプを呼び出すプログラムに複製する必要があります。ただし、この作業を手動で行うと、保守効率の面で問題が発生し、プログラムの作成中に整合性が失われる可能性があります。
データ記述項を簡単に複製するには、呼び出しプロトタイプの連絡節に COBOL 型定義を作成し、それらの型定義を呼び出し元のプログラムおよび呼び出し先のプログラムで参照します。COBOL 型定義を作成するには、TYPEDEF 句を持つデータ記述をコーディングします。データ項目に指定した名前が、型定義になります。次に、その型定義を参照する USAGE 句を使用してデータ項目をコーディングします。次に例を示します。
01 callee-value-t pic x(2) comp-5 is typedef. 01 callee-value usage callee-value-t.
上記の例では、型定義は callee-value-t です。
完全な呼び出しプロトタイプ、およびこのプロトタイプに基づいてサブルーチンを呼び出すプログラムを次に示します。
program-id. MYROUTINE is EXTERNAL.
linkage section.
01 callee-value-t pic x(2) comp-5 is typedef.
01 callee-value usage callee-value-t.
procedure division using callee-value.
end program MYROUTINE.
program-id. MYMAIN.
working-storage section.
01 .
05 caller-value usage callee-value-t.
procedure division.
call 'MYROUTINE' using caller-value
end program MYMAIN.
TYPEDEF 句は、基本データ記述だけでなく、集団項目、およびレコード構造全体にも使用することができます。次に例を示します。
program-id. MYROUTINE is EXTERNAL.
linkage section.
01 callee-value-t is typedef.
05 callee-value-item-1 pic x(2) comp-5.
05 callee-value-item-2 pic x(4).
01 callee-value usage callee-value-t.
procedure division using callee-value.
end program MYROUTINE.
program-id. MYMAIN.
working-storage section.
01 .
05 caller-value usage callee-value-t.
procedure division.
move 123 to callee-value-item-1 of caller-value
move 'abcdef' to callee-value-item-2 of caller-value
call 'MYROUTINE' using caller-value
end program MYMAIN.
呼び出しプロトタイプに型定義として定義したデータ項目はすべて、そのプロトタイプを使用するすべてのプログラムで使用できます。
TYPEDEF 句の詳細については、該当の「言語リファレンス」の「データ部 - ファイル記述項およびデータ記述項」セクションにある「TYPEDEF 句」トピックを参照してください。