多次退出导致编译器警告

问题描述 投票:1回答:2

我有一个程序,在某些情况下,我想尽早退出,而不是继续执行流程,而不必在调用段落中检查该退出较早的情况。

为此,我有一段“ 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”行)]

cobol
2个回答
0
投票
与执行执行EXEC CICS RETURN的段落没有什么不同。

@@ SimonSobisch对COBOL的了解比以往任何时候都多,并希望提供一个示例来说明如何与“ COBOL方式”保持一致,这将对这里的未来知识寻求者有用。


0
投票
如果Enterprise z / OS的Enterprise 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在那里需要使用声明)。

© www.soinside.com 2019 - 2024. All rights reserved.