NEXT SENTENCE和嵌套句子

时间:2011-06-08 16:31:26

标签: cobol

我遇到过这段代码,并且想知道如果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。?

3 个答案:

答案 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而不需要“标签”。

如前所述,它不应​​该用在新代码中。

相关问题