PROTECT-LINKAGE

標準の COBOL 語を拡張し、呼び出し元のプログラムと呼び出されるプログラムで、パラメーターの長さが異なっていても動作させる。

通常、制約を無視すると、保護違反やメモリアクセスエラーのような重大なエラーなど、不確定な結果になる。

注: この指令はネイティブCOBOLでのみサポートされています。
構文:
>>-.---.-.----.--PROTECT-LINKAGE-----------><
   +-/-+ +-NO-+
パラメーター:

なし

属性:
省略値: NOPROTECT-LINKAGE ( )
段階: 構文チェック
$SET: 初期
説明:

ANSI COBOL 規格では、CALL 文で渡すパラメーターに関する一般規則の中で次のように記述している。「呼び出されたプログラムのデータ項目の内容には、呼び出しプログラムの対応するデータ項目の内容に記述されているのと同じ文字位置数を記述しなければならない。」この COBOL システムでも、PROTECT-LINKAGE 指令を指定しないでプログラムをコンパイルする場合には、この制約を守る必要がある。

この制約は、PROTECT-LINKAGE 指令が設定されると解除される。呼び出されたプログラムでは、一致しないパラメーターは構文中の送り出し項目としてのみ使用され、受け取り項目としては使用されない。

呼び出されたプログラムと呼び出しプログラム間で、一致しないパラメーターの文字位置は一致しない文字です。この一致しない文字の内容は、呼び出されたプログラムの送り出し項目のパラメーターに定義されない。

本指令を使用すると、アプリケーションの性能に影響する。

例:

呼び出しプログラム

     ...
     03 x1  pic x.
     03 x2  pic x(100).
 procedure division.
      ...
     call subprog using x1
      ...

サブプログラム

 working-storage section.
 01  y1       pic x(1000).

 linkage section.
 01  z1       pic x(1000).

 procedure division using z1.

     move z1 to y1
* この操作は正常に動作して、 x1 の内容が転送される。また、
* 呼び出しプログラム の x1 に続くデータも転送される。転送され
* るデータのサイズは、1000バイトまで、または割り当てられた
* メモリの限界までである。転送されるデータが1000バイトよりも
* 小さい場合は、y1の残りの部分が空白で埋められる。

     move y1 to z1.
* この操作は保護されていないため、呼び出しプログラムのx1を超えた
* データを壊すか、割り当てられたメモリを超えて書き込もうと
* して失敗する。これは保護違反の原因になる可能性がある。
他参照:

関連項目