首页 > 解决方案 > GnuCobol 相当于 NOSSRANGE

问题描述

我想在链接部分指定一个单字节区域。程序 A 可以将程序 B 称为

call 'PROGB'   using mycopybook

其中 mycopybook 一次可能是 500 字节,下一次可能是 2000 字节等等。

避免需要知道/保留程序 B 的链接部分中预期的最大字节数的“简单”方法是将其定义为 ONE 字节(毕竟,程序 B 的链接部分只是指向内存中 mycopybook 的指针,不多也不少)。麻烦的是,当我尝试使用以下代码编译程序 B

LINKAGE SECTION.
01  copybook-1     pic x.
procedure division using copybook-1.
display 'First 4 bytes passed in 'copybook-1(1:4)

我得到一个编译错误。

progent.cbl:113:错误:“copybook-1”的长度超出范围:4

是否有一些 COBC 参数相当于 NOSSRANGE?

(FWIW,在 Micro Focus 的 Mainframe Express 中,我工作的默认位置是 SSRANGE,所以我不得不专门为上面的示例设置 NOSSRANGE,但之后就没有问题了)

标签: linkagegnucobol

解决方案


是否有一些 COBC 参数相当于NOSSRANGE

答:没有,目前没有。您可以创建一个功能请求,甚至提供一个补丁,以便在编译时不检查边界。

GnuCOBOL 确实有一个启用所有运行时检查的选项:--debug,使用它类似于[检查编译和运行时],但不使用它与编译时检查是无条件完成的SSRANGE(2)不相似;NOSSRANGE您只能禁用编译时常量折叠,这样field (1-1:5)不会-fno-constant-folding引发问题,但field (0:5)总是会这样做。

如果您一般可以禁用它,您当然可以调整编译器(cobc/typeck.c)并删除这些检查,但切换会更好!


推荐阅读