在变量声明或使用 CLEAR 期间,子过程、INZ 中通常首选什么?

oja*_*jay -1 rpg rpgle ibm-midrange

假设两种选择都会产生相同的结果,您通常会做出什么选择?为什么?

dcl-proc test_proc ;
   ...
   dcl-s count  int(5) inz ;
   ...
   // use count
end-proc ;
Run Code Online (Sandbox Code Playgroud)

或者

dcl-proc test_proc ;
   ...
   dcl-s count  int(5) ;
   ...
   clear count
   // use count
end-proc ;
Run Code Online (Sandbox Code Playgroud)

另外,由于变量count的范围是局部的,我们是否需要使用它们中的任何一个?

Bar*_*ris 7

您不需要 INZ 即可使用 RESET。

但最好仅当 RESET 值与 CLEAR 值不同时才使用 RESET。

使用RESET需要编译器生成额外的存储空间和额外的指令来保存初始值。


Cha*_*les 5

RPG 独立变量被初始化为其默认值。对于所有数字字段,默认值为 0。

因此,对于您的本地(和非静态)变量,您不需要INZ也不需要使用CLEARRESET在使用之前。

RESET总是将变量重置为其初始化值。
CLEAR会将变量重置为类型默认值。

例子:
dcl-s myNum int(5);

  • CLEAR myNum;--> myNum== 0
  • RESET myNum;--> myNum== 0

dcl-s myNum int(5) inz(5);

  • CLEAR myNum;-->myNum== 0
  • RESET myNum;-->myNum == 5

附录
我唯一经常使用 INZ 的就是数据结构。没有INZ,DS初始化为空白;无论子字段的数据类型如何。使用 INZ,每个子字段都会初始化为其默认类型。