2014-10-06 55 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(它是一種潛在的糟糕的情況盲目明顯地表明該分支的預期目的地是什麼),同時使用看起來是「結構化」的構造。