我遇到过这段代码,并且想知道如果x小于3,将执行哪一行。
IF (X < 3)
NEXT SENTENCE
ELSE
GO TO A010-DO-A.
GO TO B010-DO-B.
GO TO C010-DO-C.
我不确定NEXT SENTENCE是否会注意到嵌套在ELSE块中的句子。当执行NEXT SENTENCE时,它将跳过GO TO A010-DO-A。或转到B010-DO-B。?
答案 0 :(得分:4)
不要混淆COBOL中的陈述和句子的范围。
句子以句号结束(如果你是英国人,则句号为句号)。下句
在当前句子结束后进入下一个陈述。在
你的例子是GO TO B010-DO-B
Cobol中NEXT SENTENCE
的一般用法是折旧的 - 至少从那以后
范围终止符的引入,例如END-whatever
(例如END-IF
)
这发生在1985年左右的某个时候!请不要
再使用NEXT SENTENCE
。你需要知道它是什么以及它做了什么
为了阅读遗留代码,请
避免在任何新代码中使用它。
在您的示例中编写代码的更好方法是:
IF (X < 3)
CONTINUE
ELSE
GO TO A010-DO-A
END-IF
GO TO B010-DO-B
GO TO C010-DO-C
...或
IF (X >= 3)
GO TO A010-DO-A
END-IF
GO TO B010-DO-B
GO TO C010-DO-C
请注意所有句点(.
)已被删除,因为
范围终结符END-IF
使它们变得多余。期
仅在程序结束时(即段落/部分)和其他一些地方需要。
CONTINUE
语句基本上是无操作,因此除了存在之外没有其他影响
占位符以保持语法有效。
顺便说一句......我能说的最好,声明GO TO C010-DO-C
在逻辑上是无法访问的。
答案 1 :(得分:0)
如果X小于3
IF (X < 3)
NEXT SENTENCE
否则,换句话说,如果X等于或大于3
ELSE
GO TO A010-DO-A.
答案 2 :(得分:0)
NEXT SENTENCE“分支”(编译器生成的任何语言的GO TO)到NEXT SENTENCE语句之后物理定位的下一个完整停止/句点之后的代码行。它实际上是一个GO TO而不需要“标签”。
如前所述,它不应该用在新代码中。