gpt4 book ai didi

rpgle - 为什么我必须为主程序指定一个 ExtPgm 参数?

转载 作者:行者123 更新时间:2023-12-02 08:28:36 24 4
gpt4 key购买 nike

我的程序,PKGDAYMONR 有控制选项:

ctl-opt Main( CheckDailyPackages )

CheckDailyPackages 程序具有以下 PI:

dcl-pi *n ExtPgm( 'PGMNAME' );

如您所见,ExtPgm 参数不是程序的名称。其实就是模板源里过来的,忘记改了。尽管 ExtPgm 中的名称错误,但程序运行没有问题。

如果我删除该参数并将关键字保留为 ExtPgm,我会收到以下消息:

RNF3573: A parameter is required for the EXTPGM keyword when the procedure name is longer than 10.

如果我从过程接口(interface)中完全删除 ExtPgm,它也会提示:

RNF3834: EXTPGM must be specified on the prototype for the MAIN() procedure.

那么,如果我输入的值无关紧要,为什么我必须指定一个参数呢?

操作系统级别:IBM i 7.2

最佳答案

可能值得作为服务提供商的缺陷追究;大概对于大多数人来说,这将是 IBM 而不是第三方,因为他们无论如何都必须联系 IBM,因为他们认为问题显然出在他们的编译器上。除此之外,作为我的“答案”,我提供一些想法:

IMO,显然与 OP 一致,在给定的场景中命名 ExtPgm 似乎毫无意义。我认为编译器感到困惑,同时试图在隐式生成的原型(prototype)验证中为仅提供过程接口(interface)的 linear-main 强制执行一些要求;即强制执行适用于显式原型(prototype)的要求,但在给定场景中可能被忽略的要求[因此不再是要求]。我建议虽然 RNF3573 似乎适合诊断显式原型(prototype)的 EXTPGM 规范,但 IMO 同样的效果是不合适的 [即不应为编译器生成的隐式原型(prototype)执行验证。

FWiW:是否测试了该自由格式代码的固定格式等效项,以查看是否产生了相同或不同的错误?以下源代码当前包含以“PGMNAME”作为参数的 EXTPGM 规范 [即提供任何 10 字节命名 的虚假值来请求编译器,就像在 OP 的场景中所做的那样,只是为了成功编译],但可以与其他变体一起编译更改源代码,模仿对自由形式变体所做的操作,以测试相同\一致的验证和错误是否会产生影响:
- 只是编码了 EXTPGM 关键字(没有参数);是RNF3573的效果吗?
- EXTPGM 关键字可以省略;是RNF3834的效果吗?
- 完全删除了 D-spec(如果没有定义参数);这不是 OP 中提到的正在尝试的变体之一,所以……效果?

    H MAIN(CheckDailyPackages)
*--------------------------------------------------
* Program name: CheckDailyPackages (PGMNAME)
*--------------------------------------------------
P CheckDailyPackages...
P B
D PI EXTPGM('PGMNAME')
/free
// Work is done here
/end-free
P CheckDailyPackages...
P E

关于rpgle - 为什么我必须为主程序指定一个 ExtPgm 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29683974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com