我有一个程序,在某些情况下,我想尽早退出,而不是继续执行流程,而不必在调用段落中检查该退出较早的情况。
为此,我有一段“ EXIT-FAILURE”,该段进行检查以确保常规返回标志字段不正确(0),记录一条消息(DISPLAY
),最后得到语句[C0 ]。
但是,这样做会使我对每个调用此“ EXIT-FAILURE”段的PERFORM发出编译器警告:GOBACK
是否有这种方式(基本上是多次退出/提前退出而不是一次退出),而没有编译器警告?
这个想法是否完全违背了COBOL的做事方式(我的经验更多是在Java中,在保护声明或异常的情况下这是完全正常的?]
编辑:添加西蒙请求的最小程序:
IGYCB7310-W The "PERFORM" statement at "PERFORM (line [line-number])" cannot reach its exit.
这两个警告与我的问题有关:
IDENTIFICATION DIVISION.
PROGRAM-ID. SOQUEST.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
PERFORM A100-INITIALIZE
PERFORM A200-VALIDATE
PERFORM B200-PROCESS-STEP-1
GOBACK
.
A100-INITIALIZE.
DISPLAY "INITIALIZED"
.
A200-VALIDATE.
PERFORM Z900-EXIT-FAILURE
.
B200-PROCESS-STEP-1.
DISPLAY "COMPLETED STEP 1"
.
Z900-EXIT-FAILURE.
GOBACK
.
((第58.1行映射到“ PERFORM A200-VALIDATE”行;第68.1行映射到“ PERFORM Z900-EXIT-FAILURE”行)]
@@ SimonSobisch对COBOL的了解比以往任何时候都多,并希望提供一个示例来说明如何与“ COBOL方式”保持一致,这将对这里的未来知识寻求者有用。
PERFORM
的支持(以及理想的用户定义的异常),这将是可行的方式(既是问题中所要求的“ COBOL”,又是java中的“ exception”),并且您可以将段落作为RAISE exception-name
放入DECLARATIVES
。在此之前[=也许永远]:[如果没有针对此现场的规则:请使用EXIT-FAILURE SECTION. USE AFTER EXCEPTION CONDITION exception-name
-这个COBOL动词说“去那里”(而且可能不会回来,尤其是像您这样命名的段落)。
[如果存在针对GO TO EXIT-FAILURE
的规则-使用@cschneid的方法-在标头中添加有关此警告的注释,并在发生其他注释时直接引用此注释。
旁注:我
个人仍会
尝试将段落放到GO TO
中(现在不变,只需将其“上移”到DECLARATIVES
)以拉伸该点“只有在出现问题时才被称为”。但是在这种情况下,您的编译器可能会发出另一个警告甚至错误(至少“标准” -COBOL在那里需要使用声明)。