== 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[]
