编译RPG ILE程序遇多错误求助:附代码及编译日志
修复ILE RPG子程序编译错误
错误原因及修复步骤
1. *RNF3788:未指定DFTACTGRP(*NO)
内部子程序(非外部程序调用)的原型要求程序不能使用默认激活组,可通过两种方式解决:
- 方式一:修改源代码H规范
在程序开头的H行添加DFTACTGRP(*NO),修改后代码示例:
H DFTACTGRP(*NO) * Global variables (accessible to all sub procedures local to this pro D Sum S 4P 0 * SubProcedure prototype OK DSubProcedure1 PR 4P 0 D 4P 0 VALUE D 4P 0 VALUE /Free Sum = 0; // Initialize global variable Sum = SubProcedure1(5:10); DSPLY Sum; *INLR = *ON; /End-Free * * SubProcedure Begin PSubProcedure1 B * SubProcedure Input DSubProcedure1 PI 4P 0 D num1 4P 0 VALUE D num2 4P 0 VALUE * local variable to this subprocedure only (scope limited) D Sum S 4P 0 /Free Sum = num1 + num2; Return Sum; /End-Free PSubProcedure1 E // 新增子程序结束规范
- 方式二:编译命令指定参数
直接执行带参数的CRTBNDRPG命令:
CRTBNDRPG PGM(REUY851/ILEPGM1) SRCFILE(REUY851/QRPGLESRC) SRCMBR(ILEPGM1) DFTACTGRP(*NO)
2. *RNF1502:子程序结束规范缺失
每个以Pxxxx B开头的子程序必须对应Pxxxx E结束标记,在子程序的/End-Free之后添加PSubProcedure1 E,如上述修改后的代码所示。
3. *RNF7503:操作数未定义
该错误是前两个错误引发的连锁问题,修复前两个错误后,此错误会自动消失。
关于编译设置无法保存的问题
如果通过SEU的14选项无法保存DFTACTGRP设置,优先选择修改源代码H规范的方式,将编译参数固化在代码中,无需每次编译手动调整;也可直接在命令行执行带参数的CRTBNDRPG命令,规避SEU配置限制。
内容的提问来源于stack exchange,提问作者reymagnus
相关产品推荐
相关产品推荐

