PROTOTYPE

COMP、BINARY、COMP-4、COMP-5、および COMP-X データ項目の呼び出しプロトタイプが、CALL 文の BY VALUE 句、または RETURNING 句で使用された場合に、これらを大まかに、または厳密にチェックする。またプロトタイプからパラメータータイプを暗黙的にコピーするかどうかも指定する。

構文:
>>----.---.-----PROTOTYPE----"level"---------------------><
      +-/-+
パラメーター:
level 次のいずれかを指定する。
RELAXED データ項目およびパラメーター属性を、プロトタイプと大まかにチェックする。
NORMAL

データ項目は厳密に、パラメーター属性は大まかに、プロトタイプとチェックする。

STRICT

STRICT データ項目およびパラメーター属性を、プロトタイプと厳密にチェックする。

属性:
省略値: PROTOTYPE"RELAXED
段階: 構文チェック
$SET: 任意
説明:

PROTOTYPE 指令は、呼び出しプロトタイプの呼び出し処理を制御する。

PROTOTYPE"RELAXED" は、32 ビット システムで記述されたプログラムのうち、64 ビット システムで記述された呼び出しプロトタイプを使用するプログラムをコンパイルする場合に特に有用である。

デフォルトでは、BY VALUE バイナリ データ項目は、データ形式が大まかにチェックされる(つまり PROTOTYPE"RELAXED" が設定されている)。たとえば、CALL 文で USING リストに PIC X(2) COMP データ項目を使用する際、この項目は、呼び出しプロトタイプの PIC X(n) COMP データ項目と対応させることができる。ここで n には、32 ビット システムでは 1 から 4 までの値、64 ビット システムでは 1 から 8 までの値を指定できる。渡された値が受取り側データ項目に指定された値よりも大きい場合は、切り捨てられる。大まかなデータ形式のチェックによる切り捨てを防止するには、プログラムのコンパイル時にPROTOTYPE"NORMAL" または PROTOTYPE"STRICT" を設定する。

PROTOYPE"NORMAL" または PROTOTYPE"RELAXED" を設定した場合、呼び出し時のパラメーターの属性はプロトタイプからコピーされる。PROTOYPE"STRICT" を設定した場合は、コピーされない。たとえば、次のようなプログラムがある場合、

program-id. prog1 is external. 
entry call-conv "my_api" by value x1 
                         by reference x2 
end program prog1. 

program-id. prog2. 
call "my_api" by x1 x2

PROTOYPE"NORMAL" を設定すると、my_api の呼び出しはコンパイラで次のように変換される。

call call-conv "my_api" by value x1 
                        by reference x2

PROTOTYPE"STRICT" を設定した場合、my_api の呼び出しは通常の規則に従った場合と同様にパラメーターが処理される。そのため、この呼び出しは次のように変換される。

call "my_api" by reference x1 
              by reference x2

その後、コンパイラから適切なエラー メッセージが出力される。同様に、呼び出し規則がプロトタイプに指定されているものと一致しない場合、または CALL 文に呼び出し規則が指定されていない場合は、エラー メッセージが出力される。

他参照:

CALL プロトタイプの詳細については、 プログラム開発ブックの 「2. プログラムの呼び出し」 の章の 呼び出しプロトタイプ の節を参照。