rspec/rules/S1899/rule.adoc

59 lines
1.5 KiB
Plaintext

== Why is this an issue?
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
[source,text]
----
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
[source,text]
----
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
----