CALL语句中BY CONTENT和BY VALUE有什么区别?

rig*_*old 5 cobol calling-convention

COBOL 中的语句BY CONTENT和语句之间有什么区别?BY VALUECALL

Bil*_*ger 6

BY CONTENT在a CALL上将标识符的内容复制到编译器管理的存储区域,然后隐式地将其"通过引用"传递给CALLed程序.

这意味着CALLed程序可以更改数据,但CALLed程序中的任何更改都不会影响CALLing程序中的原始数据.

对于编译器有效的任何大小的任何标识符都可以按BY CONTENT使用(受限于任何限制,如果存在,则为特定编译器记录 - 您永远不知道).

虽然您可以更改CALLed程序中的值,但这样做似乎有点模糊.

BY VALUE是一个完全不同的野兽.它非常有限,因为"传递"的值可以是"整数"或单字节的字母数字值.它也可以是文字.

PROCEDURE DIVISION USING ...已经知道,在通过值的情况下,即是如此,通过以等同的方式将其指定到呼叫.关于CALL的参考和内容都是程序划分使用的参考.

具体如何实现取决于具体的编译器.IBM Enterprise COBOL将值本身放在"参数列表"中.