サブプロシージャーを呼び出す場合には、プロトタイプ呼び出しを使用しなけれ ばなりません。また、この方法で任意の言語で書かれた プログラムまたはプロシージャーを 呼び出すこともできます。プロトタイプ呼び出しとは、 プロトタイプを使用して、コンパイル時に呼び出しインターフェースを検査することによって行う呼び出し です。プロトタイプは、呼び出しインターフェースの定義です。これには、次の情報が含まれます。
プロトタイプは、プログラムまたはプロシージャーを正しく呼び出すため、 さらに呼び出し元が正しいパラメーターを渡したことを確認するために、コンパイ ラーによって使用されます。 図 13 は、レコードの各種フィールドを読み取り可能な形式に様式設定するプロシージャー FmtCust のプロトタイプを示しています。これには 2 つの出力パラメーターがあります。
// プロシージャー FmtCust のプロトタイプ (定義仕様書の PR に // に注意してください)。2 つの出力パラメーターがあります。 D FmtCust PR D Name 100A D Address 100A
アドレスを様式設定するため、アプリケーションはプロシージャー FmtAddr を呼び出します。 FmtAddr には複数の入力パラメーターがあり、 可変文字フィールドを戻します。 図 14 は FmtAddr のプロトタイプを示しています。
//--------------------------------------------------------- // FmtAddr - アドレスを様式設定するためのプロシージャー //--------------------------------------------------------- D FmtAddr PR 100A VARYING D streetNum 10I 0 CONST D streetName 50A CONST D city 20A CONST D state 15A CONST D zip 5P 0 CONST
プログラムまたはプロシージャーがプロトタイプの場合には、CALLP で、ある いは戻り値で使用したい場合は式で、これを呼び出します。 プロトタイプの名前に続くリストに パラメーターを渡します。例えば、名前 (パラメーター 1 : パラメーター 2 : ...) です。
図 15 は FmtCust への呼び出しを示します。図 13 で示された OUTPUT パラメーター の名前は CALL ステートメントのものと一致しないことに注意してください。 プロトタイプのパラメーター名は文書化の目的だけのものです。 プロトタイプは、呼び出しインターフェースの属性を記述する のに役 立ちます。 呼び出しパラメーターの実際の定義は、プロシージャー自身の内部で実行され ます。
C CALLP FmtCust(RPTNAME : RPTADDR)
プロトタイプ呼び出しを使用して (同じ構文で) 次のものを呼び出すことができ ます。
FmtCust は FmtAddr を呼び出してアドレスを様式設定します。 FmtCust は戻り値を使用する必要があるために、 FmtAddr への呼び出しは式の中で行われます。 図 16 はこの呼び出しを示しています。
//-------------------------------------------------------------- // FmtAddr プロシージャーを呼び出してアドレスを処理します。 //-------------------------------------------------------------- Address = FmtAddress (STREETNUM : STREETNAME : CITY : STATE : ZIP);
上図のように、値を戻すためのプロシージャーの使用によって、 必要なユーザー定義の機能を書くことができます。 さらに、 プロトタイプ呼び出しインターフェースを使用すれば、 パラメーターを渡す方法の選択肢が広がります。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.