プロトタイプ

プロトタイプは、呼び出しインターフェースの定義です。これには、次の情報が含まれます。

プロトタイプは明示的に定義することも、暗黙的に定義することもできます。 異なる RPG モジュールからプロシージャーが呼び出される場合には、 呼び出し元モジュールと、プロシージャーを定義するモジュールの両方にプロトタイプが明示的に指定されていなければなりません。 プロシージャーが同じモジュール内でのみ呼び出される場合には、 明示的にプロトタイプを定義することも、それを省略することもできます。 プロトタイプが省略されると、コンパイラーは、プロシージャー・インターフェースからそれを暗黙的に定義します。

別のモジュールで定義されたプロシージャーを呼び出すモジュールでは、呼び出しを行うプログラムまたはプロシージャーの定義仕様書 にプロトタイプが含まれていなければなりません。このプロトタイプは、プログラムまたはプロシージャーを正しく呼び出し、呼び出 し元が確実に正しいパラメーターを渡せるように、コンパイラーによって使用さ れます。

プロトタイプ定義に適用される規則は、次のとおりです。

これらのキーワードについては、定義仕様書のキーワードを参照してください。図 1 は、数値入力パラメーターを受け入れて、文字ストリン グを戻すサブプロシージャー CVTCHR のプロトタイプを示しています。 戻り値と関連した名前はないことに注意してください。この理由から、プログラムのデバッグ時にその内容を表示することはできません。

図 1. CVTCHR のプロトタイプ
      * The returned value is the character representation of
      * the input parameter NUM, left-justified and padded on
      * the right with blanks.
     D CVTCHR          PR            31A
     D   NUM                         31P 0   VALUE
      * The following expression shows a call to CVTCHR.  IF/THEN
      * variable rrn has the value 431, then after this EVAL,
      * variable msg would have the value
      *    'Record 431 was not found.'
     C                   EVAL      msg = 'Record '
     C                                 + %TRIMR(CVTCHR(RRN))
     C                                 + ' was not found '

エクスポートされるサブプロシージャー用またはメイン・プロシージャー用のプロトタイプを書いている場合は、プロトタイプを /COPY ファイルに入れ、そのプロトタイプを、呼び出し側とそのプロシージャーを定義するモジュールの両方のソース・ファイルにコピーします。 このコーディング技法では、呼び出し元もプロシージャー自身もすべてが同一のプロトタイプを使用するため、両者にとってパラメーター・チェックの利点を最大に生かすことができます。