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



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

EXTERNAL项目通常在WORKING-STORAGE中找到。这些通常不是通过CALLLINKAGE从一个程序传递到另一个程序,而是通过COBOL运行时直接共享
将项目声明为CCD_ 5的行为类似于";名为全局存储的运行时";,您为全局内存分配一个名称和长度,并且可以在同一运行时单元中的任何位置访问它(不需要直接的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(的运行时例程称为语言环境(LE(。几十年前,每个HLL都有自己的运行时,当它们混合到同一个运行单元中时,这会导致一些问题;从20世纪90年代初开始,IBM在运行时将所有HLL切换为LE。

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

您的问题被标记为CICS,在该环境中运行时,有时行为会有所不同。正在引用该链接。。。

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

[…]

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

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

最新更新