Ibm midrange ILE RPG程序变量值能否在调用之间保留在内存中?

Ibm midrange ILE RPG程序变量值能否在调用之间保留在内存中?,ibm-midrange,rpgle,Ibm Midrange,Rpgle,如果我使用DFTACTGRP(*否)创建了一个ILE RPG程序,我的理解是该程序将保留在内存中,直到激活组被销毁。如果我在关闭LR的情况下退出程序,变量是在下一次调用时重新初始化还是保留其值 简短回答 不,它们不会重新初始化,除非设置了ACTGRP(*New),或者您以其他方式回收激活组 长答案 *INLR是RPG循环的一个功能,而不是激活组的功能,只要您使用循环主程序,它的功能应与预期基本一致(程序未卸载除外)。对于线性主程序,所有的赌注都是无效的。该手册指出,线性模块中依赖于循环的特性“可

如果我使用DFTACTGRP(*否)创建了一个ILE RPG程序,我的理解是该程序将保留在内存中,直到激活组被销毁。如果我在关闭LR的情况下退出程序,变量是在下一次调用时重新初始化还是保留其值

简短回答
不,它们不会重新初始化,除非设置了
ACTGRP(*New)
,或者您以其他方式回收激活组

长答案
*INLR
是RPG循环的一个功能,而不是激活组的功能,只要您使用循环主程序,它的功能应与预期基本一致(程序未卸载除外)。对于线性主程序,所有的赌注都是无效的。该手册指出,线性模块中依赖于循环的特性“可能未指定”。本文档并未明确指出,
*INLR
在线性模块中不会按预期运行,但您需要知道,
*INLR
与循环相关,并且线性模块不包括循环。线性模块是使用
MAIN
NOMAIN
关键字的模块。顺便说一句,还有其他东西可以控制变量初始化以及(或代替)
LR

如果使用
ACTGRP(*NEW)
,则会在程序启动时创建一个新的激活组,并在程序结束时隐式结束。因此,无论
LR
是开启还是关闭,甚至无论程序是循环主程序还是线性主程序,程序都会关闭

如果使用命名激活组,或
ACTGRP(*CALLER)
且调用方正在命名激活组中运行,并在激活组中的所有程序结束时手动回收激活组,则字段将被初始化<代码>RCLRSC在此处不起作用

如果您使用默认激活组,或
ACTGRP(*CALLER)
,并且调用方正在默认激活组中运行,并且手动
RCLRSC
,则字段将被初始化<代码>RCLACTGRP在此不起作用。小心,这可能会导致问题


最后,这一切只适用于全局范围内的变量。在子过程中定义的局部范围变量总是在输入时初始化,在返回时释放,除非它们被定义为静态变量。静态局部变量的行为类似于全局变量。也就是说,它们在过程的第一次调用期间被分配和初始化,并在调用之间保持。

线性主模块在全局变量方面的行为类似于nomain模块。全局变量在第一次在模块中调用过程时被初始化,并且它们永远不会被重新初始化

同样的答案
Inz
仅确定程序启动时初始化变量的目的。变量在哪里声明?在全局范围内,还是在子程序内?阅读我答案的最后一段。现在是哪个模块,模块中的哪个位置?变量是在
dcl proc
-
end proc
语句之间声明的,还是与其他全局d规范一起声明在模块顶部?请与我们聊天,请参阅上面的链接感谢您参与我们的讨论,这是我第一次遇到“线性主模块”这个术语,我有兴趣研究您提供的链接。