我最近偶然发现了一个服务程序,其中在明确关闭文件后使用* inlr = * on(下面的代码)。对我来说这感觉相当过分。从我发现它是rpg循环来处理资源的释放。因此,如果没有循环(即在具有main / nomain h-specs的程序中),* inlr = * on没有办法产生任何影响,但是......我无法找到任何确认,因为周期相关问题对我来说很新,我可能会遗漏一些东西......
if %open(file);
close file;
endif;
*inlr = *on;
return *on;
答案 0 :(得分:4)
简而言之。
"最后一条记录"指标仅用于循环。它未在NOMAIN服务程序或线性MAIN程序中使用。
注意没有为子过程生成循环代码,或者在控件规范中指定了MAIN或NOMAIN。
其他参考资料
IBM的Barbara Morris(RPGLE编译器开发人员,post to the RPG mailing list)
线性主程序将在计算结束时结束。如果需要,你可以 设置* INLR,但它不会做任何与循环相关的事情,比如关闭文件。
以下是循环主模块和线性主模块的比较。http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frzasd%2Fsc09250802.htm"
答案 1 :(得分:3)
在线性主模块或非主模块中,*inlr
无效。据我所知,没有明确的文档记录,但第4页的ILE RPG Programmer's Guide说明
注意:没有为子过程或MAIN或NOMAIN生成循环代码 在控制规范中指定。
由于检查*inlr
是周期的一部分,因此推断没有功能
答案 2 :(得分:-1)
试试这个:
cl程序调用rpg程序
pgm
call testlrr
call testlrr
call testlrr
endpgm
然后这是rpg
ctl-opt dftactgrp(*no) actgrp('QILE');
dcl-pr TESTLRR extpgm('TESTLRR');
end-pr;
dcl-pi TESTLRR;
end-pi;
dcl-s counter zoned(5:0);
counter = counter + 5;
dsply counter;
return;
你会看到变量的值在后续调用中继续增加。
是的...你可以通过激活组,inz语句等来处理它....但是* inlr非常便宜并且非常简单。