USING 句は、呼び出し側プログラムで定義されているデータ項目を、呼び出し先サブプログラムで使用可能にします。
USING 句に関する以下の規則は、呼び出し側プログラムと呼び出し先プログラムが COBOL でコーディングされていることを前提にしています。
- USING 句を手続き部ヘッダーで指定するのは、このプログラムが USING 句を含んでいる CALL ステートメントによって呼び出されるサブプログラムである場合に限られます。
すなわち、呼び出し側プログラム中の CALL USING ステートメントごとにそれに対応する USING 句が、呼び出し先サブプログラムに指定されている必要があります。
- USING 句は、呼び出し先サブプログラムの手続き部ヘッダーの中で有効です。
- 各 USING ID は、呼び出し先サブプログラムのリンケージ・セクションの中でレベル 01 またはレベル 77 の項目として定義されなければなりません。
- USING ID に REDEFINES 文節を含めることはできません。
- 特定のユーザー定義語をデータ名-1 として複数回表示することはできません。
- 呼び出し側プログラムにおいては、USING 句は CALL ステートメントに対して有効となります。
つまり、各 USING ID はデータ部にレベル 01、レベル 77、または基本項目のいずれかとして定義されている必要があります。
- プログラムがプログラムの LINKAGE TYPE で呼び出される場合のデータ名の指定可能な最大数は 255 です。
また、プロシージャーの LINKAGE TYPE で呼び出されたプログラムについては、データ名の最大数は 400 です。
- 呼び出し側サブプログラムおよび呼び出し先サブプログラムの両方で USING ID の現れる順序によって、両方のプログラムで使用可能なデータの対応付けが行われます。
対応は位置によるものであり、名前によるものではありません。
対応する ID は、文字数が同じでなければなりませんが、データ記述が同じである必要はありません。
さらに指標名の場合、対応付けはなされません。
これは、呼び出し側プログラムと呼び出し先プログラムにおける指標名が常に別々の指標を参照するためです。
- CALL USING ステートメントに指定される ID は、呼び出し側プログラムで使用可能なデータ項目の名前となり、呼び出し先プログラムの中でそのデータ項目を参照できます。
また、ある特定の ID は複数回現れます。
これらの項目は、データ部の任意のセクションで定義しておきます。
- GLOBAL 文節を含む USING ID は、コンパイル単位のただ 1 つの「手続き部」の
ヘッダーで指定することができます。
IBM Extension
ID は、手続き部の USING 句で複数回現れることがあります。
その場合には、CALL USING ステートメントによって渡される最後の値が使用されます。 End of IBM Extension
- 呼び出し先プログラムのリンケージ・セクションに定義されたデータ項目は、 そのプログラムの手続き部の中で参照できます。ただし、それは以下のいずれかの条件を満たしている場合に限られます。
- 手続き部ヘッダーの USING 句のオペランドである。
- REDEFINES または RENAMES 文節で定義され、そのオブジェクトが上の条件を満たす。
IBM Extension
ADDRESS OF 特殊レジスターの引数として使用されている。 End of IBM Extension
- 上記の規則の条件を満たす項目に従属している。
- 上記の条件のいずれかを満たしているデータ項目に関連した条件名または指標名である。