プログラムに呼び出しプロトタイプを使用する場合、データ型に不一致があるとエラーが発生します。 エラーを避け、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.
呼び出しプロトタイプに型定義として定義したデータ項目はすべて、そのプロトタイプを使用するすべてのプログラムで使用できます。