"NO"的前缀在COBOL变量中是否有任何特殊含义?

jl6*_*jl6 1 cobol

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

SET NO-FURTHER-PROCESSING-REQD TO TRUE
Run Code Online (Sandbox Code Playgroud)

它还包含以下行:

IF  FURTHER-PROCESSING-REQD
...
END-IF.
Run Code Online (Sandbox Code Playgroud)

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

Bil*_*ger 9

No.

If you look in the DATA DIVISION you'll find two 88-levels beneath the same data-item.

01  A-FLAG PIC X.
    88  FURTHER-PROCESSING VALUE "Y".
    88  NO-FURTHER-PROCESSING VALUE "N".
Run Code Online (Sandbox Code Playgroud)

An 88 allows you to test the value of a field with a name, rather than just a literal.

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

所以:

IF FURTHER-PROCESSING
    do something
    SET NO-FURTHER-PROCESSING TO TRUE
END-IF
Run Code Online (Sandbox Code Playgroud)

现在,在集合之后,进一步处理是不正确的.

你给第二个88的名字对它的工作原理并不重要(但对于人类读者来说很重要).重要的是它具有的VALUE与您正在使用的88的"真值"值不同.