cobol - 如果您将文案添加到链接部分而不是将其添加到子程序中的工作存储部分,会发生什么情况?

标签 cobol

如果您将字帖添加到链接部分而不是将其添加到子程序中的工作存储部分,会发生什么情况?

最佳答案

这是一种常见的做法。拥有可用于调用程序的工作存储或本地存储部分以及被调用程序的链接部分的副本可确保 CALL 上的参数匹配。

如另一个答案中所述,链接部分中没有为抄写本分配存储空间。这与那里描述的任何其他变量没有什么不同。如果您希望链接部分中定义的变量具有可寻址性,则必须将它们包含在过程部分的 USING 短语中,这允许调用参数与链接部分中描述的变量匹配 - 或者 - 您必须动态分配足够的存储空间大小以容纳这些变量并使用 SET ADDRESS OF links-section-item TO pointer-to-allocated-storage。如果您的编译器支持,那么在 COBOL 中分配存储的最可移植的方法可能是 ALLOCATE 语句。使用 IBM Enterprise COBOL 存储可以通过语言环境可调用服务 CEEGTST 分配,Micro Focus 具有 CBL_ALLOC_MEM,一些编译器和环境支持直接调用 C 函数,因此您可以在那里使用 malloc()。

COBOL(和 C 等)编译器不强制传递参数的类型安全。在运行时,被调用程序中的 Linkage Section 变量映射到调用程序中 CALL 语句中变量的地址。

正如@SimonSobisch 的评论中所指出的,在 COBOL 标准中已经完成了一些工作,以通过原型(prototype)对 CALL 强制执行类型安全。并非所有 COBOL 编译器都支持这一点。

如果您有一个定义子程序调用参数的副本,并且在调用程序的工作存储部分和它调用的程序的链接部分使用相同的副本,则只需更改参数定义在一个地方(字帖)完成,并希望您的源代码管理系统将强制重新编译调用者和被调用程序,确保没有参数不匹配。

关于cobol - 如果您将文案添加到链接部分而不是将其添加到子程序中的工作存储部分,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55338967/

相关文章:

ibm-midrange - 库中程序中的消息 MCH1202 (C D F G)

连接到 Cobol 的 Javascript 评分应用程序

c# - WCF 服务和 COBOL VM

assembly - COBOL 是否强制一行的前 6 个字符为数字,因为它更容易编译为二进制可执行文件?

cobol - 接受签名值作为记录的一部分

cobol - 使用 GO TO 循环

xml - 如何处理 XML GENERATE 命令中的 xml 编码?

panel - 如何在 COBOL 中向面板 (ISPF) 调用、发送和接收信息

sql-server - 将数据插入 SQL Server 返回错误代码 00q

cobol - 在 COBOL 中查找字符串中的子字符串