微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 COBOL 的链接部分使用外部变量并将值从它传递到新模块并写入我的新输出文件

如何解决如何在 COBOL 的链接部分使用外部变量并将值从它传递到新模块并写入我的新输出文件

有人能告诉我为什么一个变量在一个模块中被声明为“外部”,以及如何通过链接部分在其他模块中使用它,以及如何将它们传递到新字段中,以便我可以将其写入新文件

解决方法

EXTERNAL 项常见于 WORKING-STORAGE。这些通常不会通过 CALLLINKAGE 从一个程序传递到另一个程序,而是通过 COBOL 运行时直接共享。
将项声明为 EXTERNAL 的行为类似于“运行时命名的全局存储”,您可以为全局内存块分配名称和长度,并且可以在同一运行时单元中的任何位置访问它(不需要直接 CALL ),即使在以下情况下:

 MAIN
   -> CALL B
      B: somevar EXTERNAL
      -> MOVE 'TEST' TO somevar
   -> CANCEL B
   -> CALL C
      C: somevar EXTERNAL -> now contains 'TEST'
,

在运行 z/OS 的 IBM Z 大型机上,所有高级语言 (HLL) 的运行时例程都称为 Language Environment (LE)。几十年前,每个 HLL 都有自己的运行时,这在将它们混合到同一个运行单元中时会引起一些问题;从 1990 年代初开始,IBM 将所有 HLL 切换到 LE 以用于其运行时。

LE 具有 enclave 的概念。该链接中的部分文字表示,飞地相当于 COBOL 中的运行单元。

您的问题被标记为 CICS,有时在该环境中运行时标记为 behavior is different。引用该链接...

在 CICS 下,CICS LINK 命令的执行会创建语言环境所称的子飞地。一个新环境被初始化并且子飞地获得它的运行时选项。这些运行时选项独立于创建飞地中存在的那些选项。

[...]

执行 CICS XCTL 命令时会发生类似的情况。在这种情况下,我们没有得到子飞地,但是现有的飞地被终止,然后使用为新程序确定的运行时选项重新初始化。同样的性能考虑也适用。

因此,正如@SimonSobich 指出的那样,如果您在 CICS 中运行时使用 CALL 来调用您的子例程,那么 EXTERNAL 数据对于运行单元是全局的。但是,如果您使用 EXEC CICS XCTL 来调用您的子例程,您可能会看到不同的行为并且必须以不同的方式设计您的应用程序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。