2014-10-06 56 views
0

在COBOL一个部分(类似于C的函数)可以是这样的:如何离开年底前部分,而没有goto语句

abc section. 
    command a 
    command b 
    if a = 4 
    go to abc-end 
    end-if 
    command c 
    command d.  
abc-end. 
    exit. 

到现在为止,唯一的可能性,我离开部分在结束之前(在a = 4),是与命令“goto”。

有没有其他的方式来做到这一点,没有转到?

在此先感谢您的帮助!

+0

我希望这是一个面试问题。你正在使用哪种编译器和操作系统? – 2014-10-07 21:17:42

回答

2

从草案,FCD 1.0(E)2010-08-06

The EXIT PARAGRAPH and EXIT SECTION statements provide a means of exiting a 
structured procedure without executing any of the following statements within 
the procedure. 
+1

是的,但这些都是伪装的GO TO。 'EXIT SECTION'是相对安全的(不比GO TO差),但如果人们期望它终止一个“PERFORM ... THRU ...”,那么“EXIT PARAGRAPH”会很有趣。一个没有代码生成的'EXIT'的标签。 – 2014-10-07 15:29:17

2

像这样你的例子。

abc section. 
    command a 
    command b 
    if a NOT EQUAL TO 4 
     command c 
     command d 
    end-if 
    .  

像这样发明的东西,但与名称,以帮助把握事情。

30D-UNPACK-CRATE SECTION. 
    PERFORM      30DA-COMMON-PER-CRATE 
    IF NOT STANDARD-CRATE 
     PERFORM     30DD-NON-STANDARD-CRATE 
    END-IF 
    . 

30D-UNPACK-CRATE SECTION. 
    PERFORM      30DA-COMMON-PER-CRATE 
    IF SPECIAL-CRATE 
     PERFORM     30DD-NON-STANDARD-CRATE 
    END-IF 
    . 

它使用88级的条件名称,所以可能是

88 STANDARD-CRATE      VALUE "A" THRU "D" "J" "2". 
88 SPECIAL-CRATE      VALUE "X" "Z". 

再次,只是一个例子。

除了你已经在使用SECTIONs的事实(并且如果你有一个SECTION在下一节之前的所有段落属于那个,所以你不能有单独的段落),上面可能是SECTION或者是一个SECTION段。不需要PERFORM .... THRU ...或...部分。除了地方标准......和SECTIONs之外,程序是如何编码的。

退出段落和退出段落。

这些可能或可能不适用于您正在使用的编译器。

请注意,它们在功能上与GO TO等效,但有一些注意事项,因此用它们替换GO TO将会给出错误的...我不知道是什么,但它是错误的。

PERFORM THE-FIRST 


THE-FIRST SECTION. 
TF-1. 
    some code 
    . 
TF-2. 
    some code 
    . 
TF-9. 
    some code 
    . 

不同的程序:

PERFORM A-PARAGRAPH THRU AP-9 


A-PARAGRAPH. 
    some code 
    . 
AP-1. 
    some code 
    . 
AP-9. 
    some code 
    . 

通常你会发现一个节的最后一段只包含EXIT(并意识到,EXIT产生任何代码,它只是一个占位符)和类似的情况与PERFORM ... THRU ...

通常PERFORM ... THRU ...只会包含两个段落,但没有什么除了说它是这样的地方标准。

EXIT SECTION将立即在终止该SECTION的全站/期间之前“转到”假设的CONTINUE语句。

EXIT PARAGRAPH将“GO TO”的假定CONTINUE语句之前立即全停止/周期终止

如果EXIT PARAGRAPH是一款内使用的段,或包含超过一个PERFORM ... THRU ...的范围内除了单独使用EXIT之外的任何一个段落,它可能不会像作者期望的那样工作,也不会像下一位读者期望的那样工作。

THE-FIRST SECTION. 
TF-1. 
    some code 
    IF condition 
     EXIT PARAGRAPH 
    END-IF 
    some more code 
    IF condition 
     EXIT SECTION 
    END-IF 
    some more code 
    <EXIT PARAGRAPH will arrive here> 
    . 
TF-2. 
    some code 
    . 
TF-9. 
    some code 
    <EXIT SECTION will arrive here> 
    . 

A-PARAGRAPH. 
    some code 
    IF condition 
     EXIT PARAGRAPH (a - just descriptive, not syntax) 
    END-IF 
    some more code 
    <EXIT PARAGRAPH (a) will arrive here> 
    . 
AP-1. 
    some code 
    IF condition 
     EXIT PARAGRAPH (b - just descriptive, not syntax) 
    END-IF 
    some more code 
    <EXIT PARAGRAPH (b) will arrive here> 
    . 
AP-9. 
    some code 
    . 

所以,如果在一节或与一个以上的段落PERFORM ... THRU ...使用EXIT PARAGRAPH含有多单EXIT等,那么你正在创建比使用普通GO TO(它是一种潜在的糟糕的情况盲目明显地表明该分支的预期目的地是什么),同时使用看起来是“结构化”的构造。