2011-06-08 42 views
1

我也碰到过这段代码,我想知道哪条线将被执行,如果x是小于3下一句和嵌套句子

IF (X < 3) 
    NEXT SENTENCE 
ELSE 
    GO TO A010-DO-A. 

GO TO B010-DO-B. 
GO TO C010-DO-C. 

我不知道下一句会注意到句子嵌套在ELSE块中。当执行NEXT SENTENCE时,它会跳过转到A010-DO-A。或转到B010-DO-B。?

+0

COBOL中不存在“嵌套语句”,因此在这里也没有'ELSE语句块中的嵌套语句'。它是一个嵌套的*语句。* – EJP 2017-05-10 00:02:14

回答

4

不要混淆语句和句子的范围在COBOL。

句子以句号结尾(如果您是英国人,则句号为句号)。 Next句子 转到当前句子结束后的下一个语句。在 你的榜样,这将是GO TO B010-DO-B

在用Cobol NEXT SENTENCE一般使用折旧 - 至少从 引进范围终止,如END-whatever 这happend一段时间在1985年左右(如END-IF。)!请不要 使用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逻辑上无法访问。

+0

谢谢你。我只是读这个遗留代码,我必须转换成一个PL/SQL过程(我试图在这里重写,使其通用)。其中一些非常令人困惑,我明白为什么NEXT SENTENCE已被弃用。 – Eric 2011-06-08 18:02:48

0

如果X小于3

IF (X < 3) 
    NEXT SENTENCE 

否则,或者换句话说,如果X等于或刨丝器超过3

ELSE 
GO TO A010-DO-A. 
+0

是的,但是下一个SENTENCE语句会跳过转到B010-DO-B。或转到C010-DO-C。 – Eric 2011-06-08 17:10:04

+0

抱歉,由于缺乏解释,我得到的是@NeilB说的,他指出这将转到B010-DO-B。因为转到B010-DO-C。逻辑上不可达。 – Ryan 2011-06-08 18:46:33

0

下一个句子“分支”(编译器生成的任何语言的转到)转到下一个完全停止/句点之后的代码行,它位于物理上位于NEXT SENTENCE语句之后。它实际上是一种转到无需“标签”。

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