2016-04-10 25 views
0

我試圖調用cobol中的內部條目。 該調用是確定的,但是在輸入之後還有一些段落也是錯誤執行的問題。停止調用條目的效果

這裏是我的程序:

IDENTIFICATION DIVISION. 
    PROGRAM-ID. ENTR1POW. 
    DATA DIVISION. 
    WORKING-STORAGE SECTION. 
    LOCAL-STORAGE SECTION. 
    PROCEDURE DIVISION. 
    display "BEFORE CALL NOM_PROC1=======================" 
    PERFORM NOM_PROC1 THRU E--NOM_PROC1 
    display "AFTER CALL NOM_PROC1=======================" 
    display "CALL NOM_PROC2=============================" 
    PERFORM NOM_PROC2 THRU E--NOM_PROC2 
    display "CALL ENTRY1============================" 
    CALL 'ENTRY1' 
    GOBACK. 

    NOM_PROC1. 
     display "PGM ENTR1POW: BEGIN NOM_PROC1" 
     display "PGM ENTR1POW: END NOM_PROC1" 
     CONTINUE. 
    E--NOM_PROC1. 
     EXIT. 

    NOM_PROC2 SECTION. 
     display "PGM ENTR1POW: BEGIN NOM_PROC2" 

     ENTRY 'ENTRY1' 
     display "===========BEGIN ENTRY ENTRY1" 
     display "===========END ENTRY ENTRY1" 

     ENTRY 'ENTRY2' 
     display "===========BEGIN ENTRY ENTRY2" 
     display "===========END ENTRY ENTRY2" 

     ENTRY 'ENTRY3' 
     display "===========BEGIN ENTRY ENTRY3" 
     display "===========END ENTRY ENTRY3" 

     display "PGM ENTR1POW: END NOM_PROC2" 
     CONTINUE. 
    E--NOM_PROC2. 
     EXIT. 

    NOM_PROC3 SECTION. 
     display "PGM ENTR1POW: BEGIN NOM_PROC3" 
     display "PGM ENTR1POW: END NOM_PROC3" 
     CONTINUE. 
    E--NOM_PROC3 SECTION. 
     EXIT. 

    NOM_PROC4. 
     display "PGM ENTR1POW: BEGIN NOM_PROC4" 
     display "PGM ENTR1POW: END NOM_PROC4" 
     CONTINUE. 
    E--NOM_PROC4. 
     EXIT. 

,我得到的輸出是:

BEFORE CALL NOM_PROC1======================= 
PGM ENTR1POW: BEGIN NOM_PROC1 
PGM ENTR1POW: END NOM_PROC1 
AFTER CALL NOM_PROC1======================= 
CALL NOM_PROC2============================= 
PGM ENTR1POW: BEGIN NOM_PROC2 
===========BEGIN ENTRY ENTRY1 
===========END ENTRY ENTRY1 
===========BEGIN ENTRY ENTRY2 
===========END ENTRY ENTRY2 
===========BEGIN ENTRY ENTRY3 
===========END ENTRY ENTRY3 
PGM ENTR1POW: END NOM_PROC2 
CALL ENTRY1============================ 
===========BEGIN ENTRY ENTRY1 
===========END ENTRY ENTRY1 
===========BEGIN ENTRY ENTRY2 
===========END ENTRY ENTRY2 
===========BEGIN ENTRY ENTRY3 
===========END ENTRY ENTRY3 
PGM ENTR1POW: END NOM_PROC2 
PGM ENTR1POW: BEGIN NOM_PROC3 
PGM ENTR1POW: END NOM_PROC3 
PGM ENTR1POW: BEGIN NOM_PROC4 
PGM ENTR1POW: END NOM_PROC4 

我認爲,在調用段NOM_PROC3和NOM_PROC4不應該發生。

+0

我知道,如果我將段落NOM_PROC2移動到程序結束,那麼我的問題將得到解決,但我想這樣做?有沒有其他方法可以解決我的問題。 謝謝你在advnace的回覆。 –

+0

你使用什麼編譯器? ENTRY並不打算進入調用它的程序中,它應該在另一個程序中。你想做什麼?正如@cschneid所說,「包含」或「嵌套」程序可能更符合你的要求。如果你認爲PERFORM是CALL,你也會迷惑自己。它不是,所以你的消息是不正確的。 –

回答

2

首先,在使用ENTRY之前,先想想。在30年的編碼中,我曾經遇到過一次,在20世紀70年代初編寫的程序中,並沒有任何用處。如果您看到需要ENTRY,請考慮嵌套程序。 @BrianTiffin在註釋中的非大型機環境中爲ENTRY提供了一個案例。

ENTRY語句在您的代碼中建立了一個備用入口點。這不像PERFORM。您必須從該備用入口明確返回,就像您從主入口點返回一樣。這通常是通過GOBACK聲明完成的。

您的程序表現得應該如此。您在ENTRY 'ENTRY1'聲明後沒有GOBACK,因此當您CALL 'ENTRY1'代碼執行繼續,直到它遇到程序結束。

+0

我使用條目的原因只是我試圖遷移包含條目的PL1程序,並且試圖在遷移的程序上保留這方面的內容。 –

+0

最後,我將包含條目的段落外化爲子程序,它適用於我。 –

+0

我只想添加第二個。對於GUI編程,'ENTRY'是一個強大的東西。它允許回調在工作存儲中訪問狀態。對於像GTK +按鈕點擊處理程序和X11事件等,非常方便 –