COBOL子程式呼叫

2021-03-31 14:30:10 字數 1920 閱讀 8128

內部子程式

identification division.

program-id. proc-a.

environment division.

...data division.

...procedure division.

...identification division.

program-id. proc-b.

environment division.

...data division.

...procedure division.

...end program proc-b.

identification division.

program-id. proc-c.

environment division.

...data division.

...procedure division.

...identification division.

program-id. proc-d.

environment division.

...data division.

...procedure division.

...end program proc-d.

end program proc-c.

end program proc-a.

程式a包含b,c兩個子程式,其中c又包含子程式d。

a能呼叫b,c。c能呼叫d。b不能呼叫c,a不能呼叫d。

如果c宣告為公用的,則b可以呼叫c,語法為:

program-id. proc-c is ***mon program.

當前函式中定義的變數都只是對當前函式有效。可以用global宣告為對所有函式有效。

01 data-name is golbal ...

檔案也有此宣告:fd file-name is golbal ...

如果呼叫的不是本程式中的檔案或變數,則可以用external宣告。

fd file-name is external.../01 data-name is external...

call proc var1 [on exception code1] [not on exception code2] end-call.

如果找不到proc程式名,執行code1(如果有此宣告),找到將引數var1傳遞給proc,並執行。proc返回時執行code2(如果有此宣告)。

引數應該在檔案,工作儲存或連線節中定義,應為01層資料項,77層資料項或基本資料項。

子程式要返**用程式,執行exit program

傳遞引數有3步:

首先在呼叫程式的call語句列出要傳遞的引數。

call proc var1 .

然後在被呼叫程式的過程部標題,使用using短語列出相應的引數。

procedure division using var1.

最後在被呼叫程式的連線節(linkage section)提供引數的儲存空間。

linkage section.

01 var1 pic xx.

引數傳遞有2中方式:

by content    傳遞的引數值只在被呼叫函式中被改變,呼叫函式中的值不變。

by reference. 傳遞的引數值在被呼叫函式中被改變,呼叫函式中的值也改變。

call proc var1 by content/reference.

再次呼叫子程式,子程式處於上次退出的狀態(除了連線節中的資料),開啟的檔案依然開啟。

可以用initial宣告函式被呼叫時處於初始狀態。

program-id. proc-c is initial program.

如果不想每次執行都初始化,只在需要的時候初始化,可以用cancel proc.初始化proc程式,但不執行proc。

COBOL子程式呼叫

內部子程式 identification division.program id.proc a.environment division.data division.procedure division.identification division.program id.proc b.enviro...

精通COBOL 11 2 2 子程式的呼叫順序

首先需要說明的是,子程式實際上就是普通的程式。當某一程式被其他程式呼叫時,該程式才相對呼叫的程式而言被稱作子程式。因此,當某一程式作為子程式被呼叫後,該程式也可再將其他程式作為子程式進行呼叫。當多個程式進行呼叫時,便存在一個呼叫順序的問題。關於子程式的呼叫順序,通常是提倡進行線形呼叫的。例如,以下這...

精通COBOL 11 2 1 子程式的命名規則

子程式的命名通常和普通程式的命名方式相同。但是需要注意的是,對於子程式而言,不可將其字首命名為以下這幾個名字。afbafh cbccee edcibm ifyigy igzilb 實際上,以上名字都屬於 ibm相關產品的名字。如果將子程式的字首命名為以上名字,則在主程式中將不能對其進行呼叫。當在主程...

精通COBOL 11 2 3 子程式的終止方式

當某一子程式被呼叫執行時,該程式通常有以下 3種發展方向。q呼叫另一個子程式。q終止本子程式,並返回上一層主呼叫程式。q終止本子程式,同時退出整個系統。關於第一條發展方向,實際上在上一小節中已有所提到。此處重點看後兩種發展方向。其中對於第 2種發展方向,主要是通過 goback 或exit prog...

組合語言 子程式呼叫

不是很常用的 子程式返回指令 說明 根據段內和段間 有無引數,具體分成4種情況 1 ret 無引數返回 2 ret n 有引數返回 n引數的作用 需要彈出call指令壓入堆疊的返回地址 3 段內返回 偏移地址ip出棧 ip ss sp sp sp 2 4 段間返回 偏移地址ip和段地址cs出棧 ip...