1

我正在查看一段 COBOL 代码,其中包含以下行:

SET NO-FURTHER-PROCESSING-REQD TO TRUE

它还包含以下几行:

IF  FURTHER-PROCESSING-REQD
...
END-IF.

是否有一些神奇的事情发生,没有“NO-”前缀的变量会自动设置为带有前缀的变量的反面?或者这更有可能是程序员的疏忽?

4

1 回答 1

9

不。

如果您查看 DATA DIVISION,您会在同一个数据项下找到两个 88 级。

01  A-FLAG PIC X.
    88  FURTHER-PROCESSING VALUE "Y".
    88  NO-FURTHER-PROCESSING VALUE "N".

88 允许您使用名称测试字段的值,而不仅仅是文字。

在大多数 COBOL 中,您还不能将 88 设置为 FALSE。因此,如果使用 SET,通常要做的是制作第二个 88,它具有“相反含义”的名称,并且其值与您用于阳性测试的 88 不同。

所以:

IF FURTHER-PROCESSING
    do something
    SET NO-FURTHER-PROCESSING TO TRUE
END-IF

现在,FURTHER-PROCESSING 在设置后不成立。

你给第二个 88 起的名字对于它的工作方式并不重要(但对于人类读者来说很重要)。重要的是它具有的 VALUE 与您使用的 88 的“真实”值不同。

于 2013-09-10T14:55:57.953 回答