Ben*_*ill 2 rpgle ibm-midrange
我有以下RPGLE程序:
dmypgm pr extpgm('MYPGM')
d myarr like(myarr)
d somevar like(somevar)
d myarr s 64a dim(100)
d somevar s 65a
/free
callp mypgm(myarr: somevar);
*inlr = *on;
/end-free
Run Code Online (Sandbox Code Playgroud)
当我尝试在V6R1盒子上编译它时,我收到错误消息:
RNF5343 30 1 Array has too many omitted indexes; specification is ignored.
Run Code Online (Sandbox Code Playgroud)
一些文档告诉我:
RNF5343
数组有太多省略的索引; 规范被忽略了.
三十
原因.....:在赋值运算符右侧用作操作数的数组的省略索引数大于指定为赋值结果的数组的省略索引数.
恢复...:减少操作数的省略索引数; 或者增加结果的省略索引数.再次编译.
这不是很有用,因为这是一个程序调用,而不是尝试分配一个值(比如EVAL语句或其他东西).
如果我将外部程序调用的声明更改为:
dmypgm pr extpgm('MYPGM')
d myarr 64a dim(100)
d somevar like(somevar)
Run Code Online (Sandbox Code Playgroud)
该程序将编译得很好.
那么如何将LIKE关键字与数组一起用于外部程序定义?
LIKE仅继承数据类型,长度,数据类型和CCSID.要传递数组,请同时使用LIKE和DIM:
dmypgm pr extpgm('MYPGM')
d myarr like(myarr) dim(%elem(myarr))
d somevar like(somevar)
d myarr s 64a dim(100)
d somevar s 65a
Run Code Online (Sandbox Code Playgroud)