静的プロシージャー呼び出しと動的プログラム呼び出しの使用

以下の説明は、個別にコンパイルされたサブプログラムにだけ適用されます。 ネストされたプログラムには適用されません。 ネストされたプログラム構造内での呼び出しの詳細については ネストされたプログラムの呼び出しを参照してください。

ILE COBOL プログラムで静的プロシージャー呼び出しを使用したか、 動的プログラム呼び出しを使用したかにより、バインディングの処理方法は異なります。 静的プロシージャー呼び出しを使用して ILE COBOL サブプログラムを呼び出した場合、 まずコンパイルしてモジュール・オブジェクトにしてから、 コピーまたは参照によって、呼び出し ILE COBOL プログラムと同じプログラム・オブジェクトにバインドします。 動的プログラム呼び出しを使用して ILE COBOL サブプログラムを呼び出す場合、ILE COBOL サブプログラムは別個のプログラム・オブジェクトとしてコンパイルおよびバインドする必要があります。 バインディング・プロセスの詳細については、「ILE 概念」を参照してください。

静的プロシージャー呼び出しを使うと、動的プログラム呼び出しを使う場合よりパフォーマンスが向上します。

静的プロシージャー呼び出しを使って、ILE COBOL サブプログラムを呼び出す場合、そのサブプログラムはすでに活動化されています。 それは、呼び出し側プログラムと同じプログラム・オブジェクトとしてバインドされており、 呼び出し側 ILE COBOL プログラムから制御を受け取ってすぐに実行されるからです。

動的プログラム呼び出しを使用して ILE COBOL サブプログラムを呼び出す場合、それ以外の多くのことを実行してからでないと、 呼び出し先 ILE COBOL プログラムを実行することができない場合があります。 それには、以下のことが含まれます。

したがって、動的プログラム呼び出しは、最初に活動化グループで実行する前にまず活動化しなければならないので、 静的プロシージャー呼び出しよりも遅くなります。

さらに、動的プログラム呼び出しと静的プロシージャー呼び出しでは、 呼び出し側 ILE COBOL プログラムから呼び出し先 ILE COBOL プログラムに渡せるオペランドの数も異なります。 動的プログラム呼び出しを使用する場合、最高 255 個のオペランドを渡すことができます。 静的プロシージャー呼び出しを使用する場合、最高 400 個のオペランドを渡すことができます。

OMITTED として指定された引き数または操作記述子と関連していると指定された引き数は、 静的プロシージャー呼び出しを使用することによってしか渡すことができません。 それらの引き数は、動的プログラム呼び出しを使用して渡すことはできません。

CALL リテラルを使用した静的プロシージャー呼び出しの実行

CALL リテラル のステートメントを使用して、 静的プロシージャー呼び出しを実行することができます (リテラル はサブプログラムの名前)。 呼び出しを静的プロシージャー呼び出しとして指定するには、 次の 3 とおりの方法があります。 優先度の高いもの順になっています。

注:
IN LIBRARY 句は、静的プロシージャー呼び出しと互換性がありません。
  1. CALL ステートメントの LINKAGE 句を使用する。
  2. SPECIAL-NAMES 段落の LINKAGE TYPE 文節を使用する。
  3. CRTCBLMOD および CRTBNDCBL のコマンドの LINKLIT パラメーターを使用するか、 または関連した PROCESS ステートメントのオプションを使用する。

CALL リテラルを使用した動的プログラム呼び出しの実行

CALL リテラル のステートメント (リテラル はサブプログラムの名前) または CALL id のステートメントを使用して動的プログラム呼び出しを実行することができます。 CALL id の詳細については CALL id の使用を参照してください。 CALL リテラル を使って、呼び出しを動的プログラム呼び出しとして指定するには、 次の 3 とおりの方法があります。 優先度の高いもの順になっています。

  1. CALL ステートメントの LINKAGE 句を使用する。
  2. SPECIAL-NAMES 段落の LINKAGE TYPE 文節を使用する。
  3. CRTCBLMOD および CRTBNDCBL のコマンドの LINKLIT パラメーターを使用するか、 または関連した PROCESS ステートメントのオプションを使用する。

動的プログラム呼び出しは、サブプログラムを実行時に活動化します。 次の場合には、動的呼び出しステートメントを使用してください。