%PARMS (パラメーター数の戻り)

%PARMS は、%PARMS が使用されたプロシージャーに渡されているパラメーターの 数を戻します。 サイクル・メイン・プロシージャーの %PARMS は、プログラム状況データ構造の *PARMS と同じです。

バインド呼び出しによって呼び出されたプロシージャーで %PARMS が使用される場合、 呼び出し側のプログラムまたはプロシージャーが最小操作記述子を渡さないと、%PARMS によって戻される値は使用可能になりません。 ILE RPG コンパイラーは常に 1 つを渡しますが、他の言語は渡しません。 したがって、呼び出し元が別の ILE 言語で作成されていた場合には、呼び出し時に操 作記述子を渡すことが必要になります。 操作記述子が渡されない場合、%PARMS によって戻された値は信頼できません。 操作記述子が渡されなかったとシステムによって判断された場合、%PARMS によって戻される値は -1 になります。しかし、場合によっては、システムがそれを検知できず、%PARMS によって戻される値が正しくない値 (0 以上) になることがあります。

%PARMS で戻される値には、RTNPARM キーワードが指定されたときに戻り値の処理に使用される追加の最初のパラメーターが含まれます。 詳しくは、 RTNPARMを参照してください。

詳しくは、 操作の呼び出し または 組み込み関数を参照してください。

図 1. %PARMS の例
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++
 * Prototype for procedure MaxInt which calculates the maximum
 * value of its parameters (at least 2 parameters must be passed)
D MaxInt          PR            10I 0
D  p1                           10I 0 VALUE
D  p2                           10I 0 VALUE
D  p3                           10I 0 VALUE OPTIONS(*NOPASS)
D  p4                           10I 0 VALUE OPTIONS(*NOPASS)
D  p5                           10I 0 VALUE OPTIONS(*NOPASS)
D Fld1            S             10A   DIM(40)
D Fld2            S             20A
D Fld3            S            100A
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
CL0N01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++
C     *ENTRY        PLIST
C                   PARM                    MaxSize          10 0
 * Make sure the main procedure was passed a parameter
C                   IF        %PARMS < 1
C     'No parms'    DSPLY
C                   RETURN
C                   ENDIF
 * Determine the maximum size of Fld1, Fld2 and Fld3
C                   EVAL      MaxSize = MaxInt(%size(Fld1:*ALL) :
C                                             %size(Fld2) :
C                                             %size(Fld3))
C     'MaxSize is'  DSPLY                   MaxSize
C                   RETURN
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++
 *----------------------------------------------------------------
 * MaxInt - return the maximum value of the passed parameters
 *----------------------------------------------------------------
P MaxInt          B
D MaxInt          PI            10I 0
D  p1                           10I 0 VALUE
D  p2                           10I 0 VALUE
D  p3                           10I 0 VALUE OPTIONS(*NOPASS)
D  p4                           10I 0 VALUE OPTIONS(*NOPASS)
D  p5                           10I 0 VALUE OPTIONS(*NOPASS)
D Max             S             10I 0 INZ(*LOVAL)
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
CL0N01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++
 * Branch to the point in the calculations where we will never
 * access unpassed parameters.
C                   SELECT
C                   WHEN      %PARMS = 2
C                   GOTO      PARMS2
C                   WHEN      %PARMS = 3
C                   GOTO      PARMS3
C                   WHEN      %PARMS = 4
C                   GOTO      PARMS4
C                   WHEN      %PARMS = 5
C                   GOTO      PARMS5
C                   ENDSL
 * Determine the maximum value.  Max was initialized to *LOVAL.
C     PARMS5        TAG
C                   IF        p5 > Max
C                   EVAL      Max = p5
C                   ENDIF
 *
C     PARMS4        TAG
C                   IF        p4 > Max
C                   EVAL      Max = p4
C                   ENDIF
 *
C     PARMS3        TAG
C                   IF        p3 > Max
C                   EVAL      Max = p3
C                   ENDIF
 *
C     PARMS2        TAG
C                   IF        p2 > Max
C                   EVAL      Max = p2
C                   ENDIF
C                   IF        p1 > Max
C                   EVAL      Max = p1
C                   ENDIF
C                   RETURN    Max
P MaxInt          E