== Why is this an issue? Testing ``++%PARMS++`` before the use of one or more parameters is a clear indication in the code that at least some parameters are treated as optional. However, failure to actually mark those parameters as such with ``++options( *nopass )++`` denies callers the ability to treat them as optional. Since all parameters after the first one explicitly declared ``++options( *nopass )++`` are also implicitly optional, this marking is only required once. However, for clarity you should consider explicitly marking all optional parameters. === Noncompliant code example [source,rpg] ---- DCL-PR VIOLATION1 EXTPGM; // Noncompliant LASTNAME Char(10); FIRSTNAME Char(10); END-PR; DCL-PI VIOLATION1; LASTNAME Char(10); FIRSTNAME Char(10); END-PI; dsply FIRSTNAME; IF %PARMS > 1; dsply LASTNAME; EndIf; *inlr = *on; ---- === Compliant solution [source,rpg] ---- DCL-PR VIOLATION1 EXTPGM; LASTNAME Char(10); FIRSTNAME Char(10) options( *nopass ); END-PR; DCL-PI VIOLATION1; LASTNAME Char(10); FIRSTNAME Char(10) options( *nopass ); END-PI; dsply FIRSTNAME; IF %PARMS > 1; dsply LASTNAME; EndIf; *inlr = *on; ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Mark optional parameters as such. === Highlighting procedure name ''' == Comments And Links (visible only on this page) === on 28 Oct 2015, 19:58:28 Ann Campbell wrote: Source: User suggestion with background from \http://www.itjungle.com/fhg/fhg010505-story02.html === on 29 Oct 2015, 13:55:15 Pierre-Yves Nicolas wrote: Looks good. endif::env-github,rspecator-view[]