我正在查看一段包含以下行的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-"前缀的变量会自动设置为带有前缀的变量的反面?或者这更可能是程序员的疏忽?
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的"真值"值不同.