Global variables that are only used by a single subprocedure should be declared in that subprocedure, thus limiting both their scope and other
procedures' ability to modify the variable unexpectedly.
If the variable has been declared in the global scope to preserve its value between calls, add the STATIC
keyword to the new local
declaration. It will be added to the global heap and retained until the program ends, but only accessible by the subprocedure in which it was
declared.
Noncompliant code example
D SUBPROC1 PR
D Parm1 5 0 Const
D X S 5 0 // Noncompliant; only used in one subproc
/Free
SUBPROC1(1234);
*inlr = *on;
return;
/End-free
P SUBPROC1 B
D SUBPROC1 PI
D Parm1 5 0 Const
/Free
X = Parm1 + 1; // X is only used here
DSPLY(E) X;
/End-Free
P E
Compliant solution
D SUBPROC1 PR
D Parm1 5 0 Const
/Free
SUBPROC1(1234);
*inlr = *on;
return;
/End-free
P SUBPROC1 B
D SUBPROC1 PI
D Parm1 5 0 Const
D X S 5 0
/Free
X = Parm1 + 1;
DSPLY(E) X;
/End-Free
P E