內部子程式
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...