在call时,参数传输的到底是怎么样的?

发布于 2022-08-30 19:26:32 字数 1918 浏览 11 评论 1

一般情况下,大家不会去注意,call传参数以及接收参数的问题。不过我自己最近看了份资料,感觉自己很模糊。
呵呵,高手自然很明白了;只是自己感觉不清楚地来给大家也说一下。
如果没有特殊说明,字符(32bytes)&数字(15 5)。
如果在value中说明了初始值,但是len中美说明,则采用value的长度。
A--------->call program,B------------->receive program;
1、若A中传输的是变量,那么当B中的参数值改变了,此时再执行A(CALL A)一次,不需要改动参数的值,自动改变。

2、若A中传输的是常量,那么当B中的参数值改变了,call A again,A中的参数重新初始化了(回到原来的值),此时需要自己code来改变。

3、数字常量:例如A中DCL  VAR(&D)    TYPE(*DEC)   LEN(15 5)  VALUE(13.529)
                               CALL PGM(B)     PARM(&D)
                          B中
                 PGM PARM(&B)
                          DCL    &B   *DEC
此时A中传的是13.529,B中接收的为13.529000,packed (15 5)。

4、逻辑常量:如传1/0,右边自动用31个空格padded。

5、变量:在A和B中定义的类型要一样(这个我想大家很熟悉)。

6、数字常量和变量(程序变量--数字变量和字符变量)都可以传输:则参数必须定义为(15 5) 。

什么是常量,什么是变量呢?举个例子:
A中
PGM
DCL VAR(&B) TYPE(*CHAR)
DCL VAR(&C) TYPE(*DEC) LEN(155) VALUE(13.529)
DCL VAR(&D) TYPE(*CHAR) VALUE('1234.56')
CHGVAR VAR(&B) VALUE(ABCDEF)
CALL PGM(B) PARM('1' &B &C &D XYZ 2)
ENDPGM
B中
PGM PARM(&A &B &C &W &V &U)
DCL VAR(&A) TYPE(*LGL)
DCL VAR(&B) TYPE(*CHAR) LEN(4)
DCL VAR(&C) TYPE(*DEC)
DCL VAR(&W) TYPE(*CHAR)
DCL VAR(&V) TYPE(*CHAR)
DCL VAR(&U) TYPE(*DEC)
ENDPGM
大家可以想想看,怎么参数的(参考IBM---red book)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

才能让你更想念 2022-09-09 04:25:59

对于3中的说明,那个是13.52900,不好意思,多敲了个0。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文