1

我想知道是否有人可以向我解释 COBOL 中嵌套 IF 语句中的点规则。例子:

*The first if statement*
 IF SUCCESSFUL-STATUS 
     PERFORM 8300-REPL-LNNTBI00 
        THRU 8300-REPL-LNNTBI00-EXIT 
*The second if statement*
        IF SUCCESSFUL-STATUS 
            DISPLAY 'RECORD ALREADY UPDATED :' WS-INF-REC
        ELSE 
            DISPLAY 'UPDATE ERROR : ' WS-INF-REC ' / ' 
            WS-RETURN-STATUS 
 READ INFILE INTO WS-INF-REC.   

“WS-INF-REC”后面的点属于哪个if语句?第一个 IF 还是第二个 IF-ELSE?我知道在大多数编程中,它应该是最后一个 if 语句,但只是为了确保它与 COBOL 相同吗?

4

3 回答 3

5

AFAIR 一个句点总是关闭所有前面的语句 - 无论它们是IFPERFORM还是其他 - 所以在你的情况下,第一个 -IF语句也被关闭。由于周期是如此之小且容易被忽略,我使用以下规则:

避免使用句号,它们是邪恶的!

只在语法规则严格要求的地方加上句点,别处。使用明确的范围终止符,如END-IFor END-PERFORM。它们使您的代码更具可读性和结构清晰,而句点由于多个闭包及其隐藏在普通视图中的习惯而容易产生混乱。

于 2014-07-01T09:06:03.840 回答
3

这真的很糟糕,非常古老的 Cobol,但它的行为方式是这样的:

*The first if statement*
IF SUCCESSFUL-STATUS 
    PERFORM 8300-REPL-LNNTBI00 
       THRU 8300-REPL-LNNTBI00-EXIT 
*The second if statement*
    IF SUCCESSFUL-STATUS 
        DISPLAY 'RECORD ALREADY UPDATED :' WS-INF-REC
    ELSE 
        DISPLAY 'UPDATE ERROR : ' WS-INF-REC ' / ' WS-RETURN-STATUS 
        READ INFILE INTO WS-INF-REC
    END-IF ## from period
 END-IF ## from period
于 2014-07-01T16:01:38.117 回答
3

句号字符“.” 结束所有 if 语句。请记住,编译器会忽略空格,因此 READ 语句是第二个 IF 语句的 ELSE 的一部分。

我们人类希望看到逻辑上使用的缩进。并且,如果是我,我会明确结束条件。我倾向于每段有一个句号:

* The first if statement *
     IF SUCCESSFUL-STATUS 
       PERFORM 8300-REPL-LNNTBI00 
         THRU 8300-REPL-LNNTBI00-EXIT 
* The second if statement*
       IF SUCCESSFUL-STATUS 
         DISPLAY 'RECORD ALREADY UPDATED :' WS-INF-REC
       ELSE 
         DISPLAY 'UPDATE ERROR : ' WS-INF-REC ' / ' 
           WS-RETURN-STATUS 
         READ INFILE INTO WS-INF-REC
       END-IF
     END-IF
     .
于 2014-07-01T19:13:33.177 回答