緩やかな型チェック

デフォルトで、コンパイラは BY VALUE で指定されたバイナリ データ項目に緩やかな型チェックを行います。つまり、バイナリ データ項目が、呼び出し元のプログラムと呼び出し先のプログラムで異なるサイズに定義されていても、プログラムはエラーなしでコンパイルされます。CALL 文の USING 指定に PIC X(2) COMP としてデータ項目を定義した場合、そのデータ項目は、呼び出しプロトタイプの PIC X(n) COMP データ項目に対応可能です。ここで、n は、32 ビットのシステムでは 1 から 4、64 ビットのシステムでは 1 から 8 です。

たとえば、次のプログラムは正常にコンパイルされます。

program-id. MYROUTINE is EXTERNAL.
 linkage section.
 01  callee-value             pic x(2) comp-5.
 procedure division using by value callee-value.
 end program MYROUTINE.

 program-id. MYMAIN.
 working-storage section.
 01  .
     05 caller-value          pic x(4) value 123.
 procedure division.
     call 'MYROUTINE' using by value caller-value
 end program MYMAIN.

上記の例では、caller-value の実際の値が大きすぎて PIC X(2) COMP-5 と定義されたデータ項目に入らない場合、バイナリの切り捨てが発生します。このような切り捨てが発生すると、プログラムのロジックに問題が発生する可能性があります。このため、型チェックを厳密にして、このような問題を事前に見つけたい場合があります。このためには、コンパイラ指令 PROTOTYPE"STRICT" を設定します。上記のプログラムのコンパイル時に PROTOTYPE"STRICT" を設定すると、コンパイラにより、型の不一致を警告するメッセージが生成されます。