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

标签 cobol calling-convention

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

最佳答案

BY CONTENTCALL将标识符的内容复制到编译器管理的存储区域,然后将隐式地“通过引用”传递给 CALLed 程序。

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

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

尽管您可以更改 CALLed 程序中的值,但这样做充其量似乎有点晦涩难懂。
BY VALUE是一种完全不同的野兽。它非常有限,因为“传递”的值可以是“整数”或一字节的字母数字值。它也可以是文字。
PROCEDURE DIVISION USING ...必须知道,在 BY VALUE 的情况下,就是这样,通过以与 CALL 等效的方式指定它。 CALL 上的 BY REFERENCE 和 BY CONTENT 都是 BY REFERENCE 上的 PROCEDURE DIVISION USING。

这是如何实现的取决于特定的编译器。 IBM Enterprise COBOL 将值本身放在“参数列表”中。

关于cobol - CALL 语句中的 BY CONTENT 和 BY VALUE 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32679345/

相关文章:

java - 如何从 iSeries V5R4 上的 COBOL 调用 java 程序

COBOL:GDG 文件描述符 (FD) 可以引用多代吗?

cobol - 如何添加页码(COBOL)

c++ - fastcall真的更快吗?

c++ - "cdecl"代表什么?

cobol - 抑制前导零

notepad++ - 如何使用 Notepad++ 为 Cobol 和 JCl 自动缩进

c - 将字符串作为参数传递给 x86-64 中的函数

gcc - 为什么我们不能直接从堆栈帧移1个字节到寄存器?

c++ - 为什么 T* 可以在寄存器中传递,但 unique_ptr<T> 却不能?