RNF7023 编译器无法确定程序如何结束(RPG)

问题描述 投票:0回答:7

这里是新手。我正在开发一个 RPG 程序,当我尝试编译它时出现此错误。

RNF7023: The compiler cannot determine how the program can end

现在,通常,我知道可以通过将

*ON
设置为
LR.
来避免此错误,我在代码中这样做了,但它仍然无法编译。

我还想指出,我的代码中有一个复制源部分。当我尝试将它们注释掉 (*) 时,RNF7023 没有出现,但我的变量因此未定义。

我错过了什么?如何复制源代码并避免RNF7023的发生?将不胜感激任何帮助。谢谢。

ibm-midrange rpgle
7个回答
2
投票

在没有看到代码的情况下很难说。我唯一能想到的是,您的复制代码可能有一个 /EOF 语句(斜线位于第 7 列)。这告诉编译器这就是结束。


1
投票

我也许可以为您指明正确的方向,而不必深入研究您的代码。 RPG 的处理结束是通过 *INLR 指示符完成的。 RPG 运行所有可执行代码,直到 *INLR 设置为打开状态,或者如果 *INLR 打开并且它用完可执行代码。

话虽如此,如果您使用复制源等,*INLR 必须位于您的 MAIN 中...它不能位于 /COPY 中。

如果您是新手(我曾经是),就个人而言,一个好习惯是在您的 RPG 程序中,打开 *INLR 作为第一行执行的代码。十年来,我一直在数千个 RPG 程序中这样做。它的作用是为程序设置一个退出,以便当 RPG 的所有可执行行完成时,程序结束。

现在您所要做的就是编写一个具有定义流程的良好程序。

祝你好运。

迈克


0
投票

查看所有其他错误。可能存在一些其他语法错误,导致编译器无法识别设置 *LR on 的语句。有时很容易忽视的一类语法错误是缺少项目,例如缺少分号或用于终止字符串文字的撇号。

您可以尝试编辑您的问题,向我们展示一些相关的代码部分。

/* Prefix each line of code with four spaces,
   So that it appears in a code block like this
*/

但是,如果您想展示整个程序或较长的部分,请将其发布到 codereview.stackexchange.com,您可以在此处链接到它。


0
投票

/COPY 中有什么?在我看来,您可能有 C、D 和 P 规格。因此,当编译器达到 P 规范时,它认为主线已完成。如果是这种情况,在 /COPY 之后的第一个 C 规范中应该会出现另一个错误(警告?),表示它不按顺序排列。


0
投票

6年多过去了,这个悬而未决的问题是搜索RNF7023时的第一个搜索结果。

对我来说,发生这种情况是因为 /copy 成员和我的代码是完全免费(**免费)和部分免费(/免费)的混合体。由于 **free 允许代码从第 1 列开始,但 /free 必须从第 8 列开始,因此它们不能很好地协同工作。一旦我将它们更改为使用相同的格式,程序就可以正常编译。


0
投票

7年多过去了,这个悬而未决的问题是搜索RNF7023时的第一个搜索结果。

对我来说,发生这种情况是因为 i Projects 不知何故与我的本地源副本不同步,并且本地源没有任何声明。

我将 i Projects 实例中的所有内容复制到剪贴板中,然后将其粘贴到本地源中,并将源添加回 i Projects。


0
投票

对我来说,我在程序开始时在

*INLR = '1';
之后添加了
'**free'
并且它有效。

© www.soinside.com 2019 - 2024. All rights reserved.