在call时,参数传输的到底是怎么样的?
一般情况下,大家不会去注意,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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于3中的说明,那个是13.52900,不好意思,多敲了个0。