Integrierte Funktion %PARMS
Die zurückgegebene Anzahl der Parameter der integrierten Funktion (%PARMS) gibt die Anzahl der Parameter zurück, die an das Programm übergeben wurden, in dem %PARMS verwendet wird.
Die integrierte Funktion %PARMS kann überall dort verwendet werden, wo CL einen arithmetischen Ausdruck unterstützt. %PARMS kann alleine oder als Teil eines komplexeren arithmetischen Ausdrucks verwendet werden. Beispiel: %PARMS kann verwendet werden, um die Anzahl der Parameter, die an das Programm übergeben wurden, mit einer numerischen CL-Variablen im Parameter COND eines Befehls IF oder WHEN zu vergleichen. %PARMS kann auch verwendet werden, um den Wert eines CL-Befehlsparameters festzulegen, wenn das zugehörige Befehlsobjekt den Parameter mit EXPR (*YES) und TYPE von *DEC, *INT2, *INT4, *UINT2oder *UINT4definiert.
%PARMS()Wenn %PARMS in einem Programm verwendet wird, das von einem gebundenen Aufruf aufgerufen wurde, ist der von %PARMS zurückgegebene Wert nicht verfügbar, wenn das aufrufende Programm oder die aufrufende Prozedur keinen minimalen Operationsdeskriptor übergibt. Das ILE CL-oder ILE RPG-Umwandlungsprogramm übergibt immer eine, andere Sprachen jedoch nicht. Wenn der Aufrufende also in einer anderen ILE-Sprache geschrieben ist, muss er einen Operationsdeskriptor an den Aufruf übergeben. Wenn der Operationsdeskriptor nicht übergeben wird, kann der von %PARMS zurückgegebene Wert nicht anerkannt werden. Der von %PARMS zurückgegebene Wert ist -1, wenn das System feststellen kann, dass der Betriebsdeskriptor nicht übergeben wurde, aber in einigen Fällen, in denen das System dies nicht feststellen kann, kann der von %PARMS zurückgegebene Wert ein falscher Wert sein, der Null oder größer ist.
Die folgenden Beispiele beziehen sich auf die Rückgabe der integrierten Parameterfunktion:
- Gibt die Anzahl der Parameter zurück, wenn das Programm von einem Programmaufruf von CALLaufgerufen wurde. Der Name des folgenden Programms lautet PARMSTESTS.
PGM PARM(&PARM1 &PARM2 &PARM3) DCL VAR(&PARM1) TYPE(*DEC) LEN(5 2) DCL VAR(&PARM2) TYPE(*CHAR) LEN(10) DCL VAR(&PARM3) TYPE(*INT) SELECT WHEN COND(%PARMS() *EQ 0) THEN(DO) SNDPGMMSG MSG('0 parm was passed in') GOTO LP0 ENDDO WHEN COND(%PARMS() *EQ 1) THEN(DO) SNDPGMMSG MSG('1 parm was passed in') GOTO LP1 ENDDO WHEN COND(%PARMS() *EQ 2) THEN(DO) SNDPGMMSG MSG('2 parms were passed in') GOTO LP2 ENDDO WHEN COND(%PARMS() *EQ 3) THEN(DO) SNDPGMMSG MSG('3 parms were passed in') GOTO LP3 ENDDO OTHERWISE CMD(GOTO CMDLBL(LPE)) ENDSELECT LP3: SNDPGMMSG MSG('parm3:' *BCAT %CHAR(&PARM3)) LP2: SNDPGMMSG MSG('parm2:' *BCAT &PARM2) LP1: SNDPGMMSG MSG('parm1:' *BCAT %CHAR(&PARM1)) RETURN LP0: SNDPGMMSG MSG('no parameter at all!') RETURN LPE: SNDPGMMSG MSG('error in %parm()') ENDPGM
Die Ausgabe des obigen Programms lautet:PGM DCL VAR(&VARDEC) TYPE(*DEC) LEN(5 2) VALUE(123.45) DCL VAR(&VARCHAR) TYPE(*CHAR) LEN(10) + VALUE(OUTERPGM) DCL VAR(&VARINT) TYPE(*INT) VALUE(-123) CALL PGM(PARMSTESTS) PARM(&VARDEC &VARCHAR + &VARINT) ENDPGM3 parms were passed in parm3: -123 parm2: OUTERPGM parm1: 123.45 - Gibt die Anzahl der Parameter zurück, wenn das Programm von einem gebundenen Aufruf von CALLPRCaufgerufen wurde. Verwenden Sie weiterhin das Programm PARMSTESTS im obigen Beispiel.
Die Ausgabe des obigen Programms lautet:PGM DCL VAR(&VARDEC) TYPE(*DEC) LEN(5 2) VALUE(123.45) DCL VAR(&VARCHAR) TYPE(*CHAR) LEN(10) + VALUE(OUTERPGM) DCL VAR(&VARINT) TYPE(*INT) VALUE(-123) CALLPRC PRC(PARMSTESTS) PARM((&VARDEC)) ENDPGM1 parm was passed in parm1: 123.45 - Gibt die Anzahl der Parameter zurück, wenn das Programm von einer anderen ILE-Sprache, z. B. ILE C, aufgerufen wurde. Verwenden Sie im obigen Beispiel immer noch das Programm PARMSTESTS.
Die Ausgabe des obigen Programms lautet:#include <stdlib.h> #include <stdio.h> #include <decimal.h> void PARMSTESTS (decimal(5,2)*, char*, int*); #pragma descriptor (void PARMSTESTS (void, "", void)) int main(void) { decimal(5,2) vardec = 123.45; char varchar[10] = "OUTERPGMC"; int varint = -123; PARMSTESTS(&vardec, varchar, &varint); return 0; }3 parms were passed in parm3: -123 parm2: OUTERPGMC parm1: 123.45 - Wird der Sonderwert *OMIT für einen Parameter in der Parameterliste in einem gebundenen Aufruf von CALLPRCangegeben, wird die Anzahl von *OMIT in der zurückgegebenen Anzahl von Parametern von %PARMS gezählt. Fügen Sie MONMSG MCH3601 vor der ersten Ausführungsanweisung in PARMSTESTS hinzu.
Die Ausgabe des obigen Programms lautet:PGM DCL VAR(&VARDEC) TYPE(*DEC) LEN(5 2) VALUE(123.45) DCL VAR(&VARCHAR) TYPE(*CHAR) LEN(10) + VALUE(OUTERPGM) DCL VAR(&VARINT) TYPE(*INT) VALUE(-123) CALLPRC PRC(PARMSTESTS) PARM((&VARDEC) (*OMIT) (*OMIT)) ENDPGM3 parms were passed in Pointer not set for location referenced. Pointer not set for location referenced. parm1: 123.45