EXIT 关键字有什么用?

What is the use of the EXIT keyword?

我见过很多 COBOL 程序都包含末尾的部分

XX-99.
    EXIT.

该段落多次用于退出该部分,例如 GO TO XX-99。我读到 EXIT 是一个空操作,因为它什么都不做。但 CONTINUE 也是如此。可以很容易地将 EXIT 替换为 CONTINUE。或者,可以将 GO TO XX-99 替换为 EXIT SECTION.

是否有任何令人信服的理由使用 EXIT 而不是 CONTINUE?为什么要引入 EXITEXIT 是在 CONTINUE 之前引入的吗?


注意:我不是在谈论 EXIT 与另一个保留字的组合,例如 EXIT PROGRAMEXIT PERFORM.

2014 年的标准仍然说:

The EXIT statement provides a common end point for a series of procedures [...]
[it] shall appear in a sentence by itself that shall be the only sentence in the paragraph [...]
[and] serves only to enable the user to assign a procedure-name to a given point in a procedure division.
Such an EXIT statement has no other effect on the compilation or execution.

即使在 COBOL 202x 中,这种格式仍然没有被标记为过时(而 EXIT PROGRAM 格式是,因为 GOBACK 提供了相同的功能)。

由于其与 CONTINUE 语句不同的语法规则,它已经不一样了(尽管一些 COBOL 编译器不强制执行此规则,其中一些甚至没有创建一个选项的选项如果违反此规则会发出警告)。

关于起源:COBOL-74似乎没有CONTINUE声明(至少我的VAX-11 COBOL-74副本没有列出),它似乎与COBOL-85 中 PERFORM 语句的内联格式。

我个人也更喜欢 EXIT 的过程格式(EXIT SECTION 甚至 EXIT PARAGRAPH 如果程序中没有使用任何部分)而不是 GO TO,但是与 COBOL 一样:遵循您的 team-/house-rules 是什么,有些人也可能会禁止这些。

Is there any compelling reason to use EXIT rather than CONTINUE?
Why was EXIT introduced anyway?
Was EXIT introduced before CONTINUE was?

没有“令人信服”的理由选择其中之一。没有实际区别。选择 EXIT 而不是 CONTINUE 的原因是符合现有的编码标准。

EXIT 是原始 COBOL 60 Report 的一部分,它是“编译器指导动词”。它的目的是标记已执行过程的结束,指示编译器将控制转移到调用 PERFORM 语句之后的语句或转移到下一次循环迭代的 PERFORM 语句。

在ANSI COBOL 68标准中,它变成了一个语句来标记一个执行过程的结束。它不再需要,因为执行范围的结尾是最后(或唯一)执行的段落或部分的结尾。它仍然是 GO TO 语句的方便目标。

[随着 SORT 语句的引入,EXIT 语句也可用于标记输入或输出过程的结束。]

CONTINUE 作为结构化编程更改的一部分在 1985 年标准中引入。它的目的是替换 IFSEARCH 语句中使用的 NEXT SENTENCE 语句或语句格式需要命令语句的任何地方,但不需要做任何事情。正是在最后一次使用中,CONTINUE 语句可用于替换 EXIT 语句。

EXIT SECTION 是在 2002 标准中引入的。