PROTOTYPE

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

PROTOTYPE 指令は、プロトタイプが必要かどうか、およびプロトタイプの不一致が見つかった場合に発行されるエラー メッセージの重大度も制御します。

構文:

>>----.---.-----PROTOTYPE----"level"----"option"----"severity"--------><
      +-/-+

パラメーター:

level
次のいずれかを指定できます。
RELAXED
データ項目およびパラメーター属性はプロトタイプと緩やかにチェックされます。
NORMAL
データ項目はプロトタイプと厳密に、パラメーター属性はプロトタイプと緩やかにチェックされます。
STRICT
データ項目およびパラメーター属性はプロトタイプと厳密にチェックされます。
option
次のいずれかを指定できます。
OPTIONAL
デフォルトです。プロトタイプは必要ありません。
REQUIRED
プロトタイプが必要です。プロトタイプが見つからない場合、「COBCH1956 Prototype not declared」というエラー メッセージが表示されます。
severity
プロトタイプの不一致に関連する問題の重大度を制御します。指定しない場合、これらのメッセージは E (ERROR) レベルになります。

使用可能なオプションは次のとおりです。

  • ERROR
  • INFO
  • SEVERE
  • WARNING

プロパティ:

デフォルト: PROTOTYPE"RELAXED OPTIONAL ERROR"
段階: 構文チェック
$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 文に呼び出し規則が指定されていない場合は、エラー メッセージが表示されます。

プロトタイプが見つからない場合にメッセージを発行し、すべてのプロトタイプ エラーを「重大」にする場合は、オプション PROTOTYPE(REQUIRED SEVERE) を指定します。