下面通過具體的程式示例,以便更好地說明靜態呼叫的特點及用法。首先,假設在靜態呼叫中,某一主程式**如下。
identificationdivision.
program-idstatic-main.
auther***.
*environmentdivision.
*datadivision.
working storage section.
77test-numpic99.
*proceduredivision.
performinit-test-num.
call『static-sub』usingtest-num.
display 『test-num after the first call: 』test-num.
performinit-test-num.
call『static-entry』usingtest-num.
display 『test-num after the second call: 』test-num.
stop run.
init-test-num.
move10totest-num.
令該程式的子程式,即與之所對應的被呼叫程式
static-sub
的**如下。
identificationdivision.
program-idstatic-sub.
auther***.
*environmentdivision.
*datadivision.
working storage section.
01plus-numpic99value15.
linkage section.
77main-num pic99.
*proceduredivisionusingmain-num.
addmain-numtoplus-num.
moveplus-numtomain-num.
goback.
entry『static-entry』usingmain-num.
addmain-numtoplus-num.
moveplus-numtomain-num.
goback.
以上程式執行後,將有如下輸出結果。
test-num after the first call: 25
test-num after the second call: 35
這是因為,在第一次呼叫前,子程式中的變數
plus-num
通過value
語句初始化為
15。將該變數中的
15和主程式中所傳遞的引數
test-num
中的10
相加後,結果將為
25。並且,此時子程式中的變數
plus-num
在相加運算結束後已由
15變成了25。
當進行第二次呼叫時,子程式為第一次呼叫結束後的狀態。此時,子程式中的變數
plus-num為25
,而並非如第一次呼叫前的
15。雖然第二次實際上仍然是對於子程式
static-sub
的呼叫,但此時該程式中的資料已不同了。第二次呼叫是將
plus-num
中的25
和test-num
中的10
相加,因此最終結果為35。
若要希望兩次呼叫時子程式的狀態都一致,則需要在子程式中進行相應的初始化。此處所說的初始化通常是指在該程式中的每乙個入口位址後,對工作儲存節中的本地資料進行初始化。進行初始化後的子程式如下。
identificationdivision.
program-idstatic-sub.
auther***.
*environmentdivision.
*datadivision.
working storage section.
01plus-numpic99value15.
linkage section.
77main-numpic99.
*proceduredivisionusingmain-num.
performinit-plus-num.
addmain-numtoplus-num.
moveplus-numtomain-num.
goback.
entry『static-entry』usingmain-num.
performinit-plus-num.
addmain-numtoplus-num.
moveplus-numtomain-num.
goback.
init-plus-num.
move15toplus-num.
仍然採用前面的主程式對以上子程式進行呼叫,則執行後的結果將如下。
test-num after the first call: 25
test-num after the second call: 25
總之,靜態呼叫的程式每次呼叫前都為其上一次呼叫後的狀態。這一點是關於靜態呼叫最需注意的地方,一定要牢記。
精通cobol 9 1 3 表的基本用途
表的基本用途是減少 編寫量,優化資料操作,便於資料查詢。對於如何利用表進行資料查詢,在本章後面幾節中將詳細講到。對於如何通過表減少 編寫量和優化資料操作,下面將結合乙個簡單例項進行具體講解。在銀行系統的應用軟體中,乙個類似於零存整取的系統是十分常見的。為突出本節討論的問題,可以對此進行乙個抽象模型的...
精通COBOL 11 2 1 子程式的命名規則
子程式的命名通常和普通程式的命名方式相同。但是需要注意的是,對於子程式而言,不可將其字首命名為以下這幾個名字。afbafh cbccee edcibm ifyigy igzilb 實際上,以上名字都屬於 ibm相關產品的名字。如果將子程式的字首命名為以上名字,則在主程式中將不能對其進行呼叫。當在主程...
精通COBOL 11 2 2 子程式的呼叫順序
首先需要說明的是,子程式實際上就是普通的程式。當某一程式被其他程式呼叫時,該程式才相對呼叫的程式而言被稱作子程式。因此,當某一程式作為子程式被呼叫後,該程式也可再將其他程式作為子程式進行呼叫。當多個程式進行呼叫時,便存在乙個呼叫順序的問題。關於子程式的呼叫順序,通常是提倡進行線形呼叫的。例如,以下這...