STICKY-LINKAGE

次にプログラムが呼び出されるまでの間、そのプログラムへのパラメタのリンク状態を保つ。

構文:
>>-.---.-.------STICKY-LINKAGE--"integer"-.-><
   +-/-+ +-NO---STICKY-LINKAGE------------+
パラメータ:
integer 1または2
属性:
省略値: NOSTICKY-LINKAGE (方言 )
段階: 構文チェック
$SET: 初期
説明:

COBOL連絡節の目的は、連絡節(連絡項目)の中に宣言されている01レベルまたは77レベルのデータ項目と動的に指定されるデータ項目とを結び付けて、両者が同じ記憶域を共有しているようにみせることである。連絡を確立する方法には次の3通りある。具体的には、CALL プログラム名 USING 文、CALL 入口名 USING 文 または SET 文である。ANSIの標準に設定されるのは最初の方法である。残りの2つの方法は、このCOBOLシステムでサポートされるCOBOL言語の拡張機能である。

ANSI COBOL において、呼び出されたプログラムは、CALL 文で渡されたパラメータに、連絡節でアクセスできる。CALL文 の USING 句のパラメタの数は、PROCEDURE DIVISION 見出しの USING 句のパラメタの数と等しくなければならない。連絡節の 01レベルまたは77レベルのデータ項目で PROCEDURE DIVISION 見出しのUSING 句にないものは参照してはならない。

ENTRY文は、プログラムへの代替入口点を提供するためのCOBOL言語の拡張機能である。ENTRY文もPROCEDURE DIVISION見出しと同様の方法でUSING 句を使用する。ENTRY文の場合も、CALL文の場合と同様に、プログラムが呼び出される入口名に関連付けられる USING 句にない連絡項目を参照してはならない。

SET 文を使用すると、記憶域の場所を識別する POINTER 値を使用して連絡項目をリンクさせることができる。このような連絡項目を参照して、その記憶域の場所に保持されているデータにアクセスすることができる。

以下に、連絡項目がいつリンクされリンクを解除されるかについて、概念的に詳しく説明する。

このCOBOLシステムは実行時に連絡項目が参照されると、その項目がデータ項目とリンクされていることを確認する。参照された連絡項目が記憶領域とリンクされていないと、 COBOLシステムは実行時エラーを発生させる。容易に確認できるようにするために、プログラムの呼び出し時、そのプログラムの最初の文が実行される直前に、すべての連絡項目のリンクが一旦解除され、その後、呼び出しプログラムから渡されたパラメタに対応する連絡項目がリンクされる。つまり呼び出されたプログラムの連絡項目のうち SET 文によってデータ項目にリンクされるものは、その後プログラムが呼び出された時には、リンクが解除されている。このため、SET 文は、プログラムの呼び出しごとに実行しなければならない。

他の多くの COBOL の実装は、ANSI 規格にそれほど厳密に従っていない。STICKY-LINKAGE 指令でも、パラメータで 2 つの代替方式を指定するが、これらもこの規格にそれほど厳密に従った方式ではない。

STICKY-LINKAGE"1" を指定すると、呼び出されたプログラムの USING 句の連絡項目のみ、そのリンクが解除される。他の連絡項目は、以前のリンク状態が維持される。プログラム名を使ってプログラムが呼び出された場合にリンクが解除されるのは、手続き部の見出しの USING 句の項目である。それ以外は、プログラムの呼び出しに使用された入口点に関連付けられる USING 句の項目のリンクが解除される。

この方式の場合でも、呼び出しプログラムの指定するパラメタの数が不十分な状態で、USING 句の連絡項目が参照される時、CALL 文の USING 句に対応するパラメタが存在しない場合、ランタイムエラーが発生する。

STICKY-LINKAGE"2"を指定すると、プログラムが呼ばれたときに連絡項目のリンクは解除されない。ただし、プログラムの起動時、または CANCEL 文で参照された後のように、プログラムが初期状態にある場合は除く。呼び出しプログラムからパラメタを渡されるか、または、SET文が使用してリンクの変更が行われない限り、すべての連絡項目は以前の呼び出し時に確立されたリンク状態を維持する。

いずれの特定の実装方法も、これによって暗示されるものではなく、また、本指令をこの COBOL システム上で用いてANSI 規格外の動作をエミュレートすると、実際にはプログラムサイズおよび実行速度に対し、有害な影響を及ぼすことがある。

例:

下記のプログラムをSTICKY-LINKAGE指令を使用しないでコンパイルして実行した場合、2 番目の CALL 文 で "ent"に制御が渡るが、DISPLAY 文で ENTRY "ent" の USING 句にない 2 個の連絡項目が参照されると、「CALLパラメタがたりない」という実行時エラー 203 が発生する。

このプログラムを STICKY-LINKAGE"1" を指定してコンパイルして実行した場合、3 番目の CALL 文で "sub" に制御が渡り、DISPLAY 文で、PROCEDURE DIVISION 見出しの USING 句にある連絡項目が参照されるが、CALL 文で対応するパラメータが渡されていないため、ここで失敗する。

プログラムにSTICKY-LINKAGE"2"を用いてコンパイルし実行すると、プログラムは最後まで正常に実行される。

program-id. main.
working-storage section.
01 param pic x value "a"
procedure division.
call "sub"using param
call "ent"
call "sub"
srop run.
end program main.
program-id. sub.
linkage section.
01 link-1 pic x.
01 link-2 pic x.
procedure division using link-1.
set address of link-2 to address of link-1
display link-1 link-2
exit program.
entry "ent"
display link-1 link-2
exit program.

呼び出されるプログラムに対し STICKY-LINKAGE"2" を使用する場合、そのプログラムは、COBOL プログラムからだけ呼び出すことができる。

他参照:

関連項目