プロトタイプ呼び出し

サブプロシージャーを呼び出す場合には、プロトタイプ呼び出しを使用しなけれ ばなりません。また、この方法で任意の言語で書かれた プログラムまたはプロシージャーを 呼び出すこともできます。プロトタイプ呼び出しとは、 プロトタイプを使用して、コンパイル時に呼び出しインターフェースを検査することによって行う呼び出し です。プロトタイプは、呼び出しインターフェースの定義です。これには、次の情報が含まれます。

プロトタイプは、プログラムまたはプロシージャーを正しく呼び出すため、 さらに呼び出し元が正しいパラメーターを渡したことを確認するために、コンパイ ラーによって使用されます。 図 13 は、レコードの各種フィールドを読み取り可能な形式に様式設定するプロシージャー FmtCust のプロトタイプを示しています。これには 2 つの出力パラメーターがあります。

図 13. FmtCust プロシージャーのプロトタイプ
      // プロシージャー FmtCust のプロトタイプ (定義仕様書の PR に
      // に注意してください)。2 つの出力パラメーターがあります。
     D FmtCust         PR
     D  Name                        100A
     D  Address                     100A

アドレスを様式設定するため、アプリケーションはプロシージャー FmtAddr を呼び出します。 FmtAddr には複数の入力パラメーターがあり、 可変文字フィールドを戻します。 図 14 は 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 ステートメントのものと一致しないことに注意してください。 プロトタイプのパラメーター名は文書化の目的だけのものです。 プロトタイプは、呼び出しインターフェースの属性を記述する のに役 立ちます。 呼び出しパラメーターの実際の定義は、プロシージャー自身の内部で実行され ます。

図 15. FmtCust プロシージャーの呼び出し
     C                   CALLP     FmtCust(RPTNAME : RPTADDR)

プロトタイプ呼び出しを使用して (同じ構文で) 次のものを呼び出すことができ ます。

FmtCust は FmtAddr を呼び出してアドレスを様式設定します。 FmtCust は戻り値を使用する必要があるために、 FmtAddr への呼び出しは式の中で行われます。 図 16 はこの呼び出しを示しています。

図 16. FmtAddr プロシージャーの呼び出し
        //--------------------------------------------------------------
        //   FmtAddr プロシージャーを呼び出してアドレスを処理します。
        //--------------------------------------------------------------
        Address = FmtAddress (STREETNUM : STREETNAME :
                              CITY : STATE : ZIP);

上図のように、値を戻すためのプロシージャーの使用によって、 必要なユーザー定義の機能を書くことができます。 さらに、 プロトタイプ呼び出しインターフェースを使用すれば、 パラメーターを渡す方法の選択肢が広がります