- COBOL 教程
- COBOL - 首頁
- COBOL - 概述
- COBOL - 環境設定
- COBOL - 程式結構
- COBOL - 基本語法
- COBOL - 資料型別
- COBOL - 基本動詞
- COBOL - 資料佈局
- COBOL - 條件語句
- COBOL - 迴圈語句
- COBOL - 字串處理
- COBOL - 表格處理
- COBOL - 檔案處理
- COBOL - 檔案組織
- COBOL - 檔案訪問模式
- COBOL - 檔案處理動詞
- COBOL - 子程式
- COBOL - 內部排序
- COBOL - 資料庫介面
- COBOL 有用資源
- COBOL - 問題和解答
- COBOL - 快速指南
- COBOL - 有用資源
COBOL - 子程式
Cobol 子程式是可以獨立編譯但不能獨立執行的程式。子程式有兩種型別:內部子程式,如執行語句,和外部子程式,如 CALL 動詞。
呼叫動詞
呼叫動詞用於將控制權從一個程式轉移到另一個程式。包含 CALL 動詞的程式稱為呼叫程式,被呼叫的程式稱為被呼叫程式。呼叫程式的執行將暫停,直到被呼叫程式完成執行。在被呼叫程式中使用 Exit Program 語句將控制權轉移回。
被呼叫程式約束
以下是被呼叫程式的要求:
連線段必須在被呼叫程式中定義。它包含傳遞到程式中的資料元素。資料項不應具有 Value 子句。PIC 子句必須與透過呼叫程式傳遞的變數相容。
使用過程部包含從呼叫程式傳遞的變數列表,並且順序必須與 CALL 動詞中提到的順序相同。
退出程式語句用於在被呼叫程式中將控制權轉移回。它必須是被呼叫程式中的最後一條語句。
引數可以透過兩種方式在程式之間傳遞:
- 按引用
- 按內容
按引用呼叫
如果被呼叫程式中變數的值被修改,則它們的新值將反映在呼叫程式中。如果沒有指定BY子句,則變數始終按引用傳遞。
語法
以下是按引用呼叫子程式的語法:
CALL sub-prog-name USING variable-1, variable-2.
示例
以下示例是呼叫程式 MAIN 和被呼叫程式 UTIL:
IDENTIFICATION DIVISION. PROGRAM-ID. MAIN. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-STUDENT-ID PIC 9(4) VALUE 1000. 01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'. PROCEDURE DIVISION. CALL 'UTIL' USING WS-STUDENT-ID, WS-STUDENT-NAME. DISPLAY 'Student Id : ' WS-STUDENT-ID DISPLAY 'Student Name : ' WS-STUDENT-NAME STOP RUN.
被呼叫程式
IDENTIFICATION DIVISION. PROGRAM-ID. UTIL. DATA DIVISION. LINKAGE SECTION. 01 LS-STUDENT-ID PIC 9(4). 01 LS-STUDENT-NAME PIC A(15). PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME. DISPLAY 'In Called Program'. MOVE 1111 TO LS-STUDENT-ID. EXIT PROGRAM.
執行上述 COBOL 程式的JCL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = MAIN
編譯並執行上述程式後,將產生以下結果:
In Called Program Student Id : 1111 Student Name : Tim
按內容呼叫
如果被呼叫程式中變數的值被修改,則它們的新值將不會反映在呼叫程式中。
語法
以下是按內容呼叫子程式的語法:
CALL sub-prog-name USING BY CONTENT variable-1, BY CONTENT variable-2.
示例
以下示例是呼叫程式 MAIN 和被呼叫程式 UTIL:
IDENTIFICATION DIVISION. PROGRAM-ID. MAIN. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-STUDENT-ID PIC 9(4) VALUE 1000. 01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'. PROCEDURE DIVISION. CALL 'UTIL' USING BY CONTENT WS-STUDENT-ID, BY CONTENT WS-STUDENT-NAME. DISPLAY 'Student Id : ' WS-STUDENT-ID DISPLAY 'Student Name : ' WS-STUDENT-NAME STOP RUN.
被呼叫程式
IDENTIFICATION DIVISION. PROGRAM-ID. UTIL. DATA DIVISION. LINKAGE SECTION. 01 LS-STUDENT-ID PIC 9(4). 01 LS-STUDENT-NAME PIC A(15). PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME. DISPLAY 'In Called Program'. MOVE 1111 TO LS-STUDENT-ID. EXIT PROGRAM.
執行上述 COBOL 程式的JCL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = MAIN
編譯並執行上述程式後,將產生以下結果:
In Called Program Student Id : 1000 Student Name : Tim
呼叫型別
有兩種型別的呼叫:
靜態呼叫發生在使用 NODYNAM 編譯器選項編譯程式時。靜態呼叫的程式在編譯時載入到儲存器中。
動態呼叫發生在使用 DYNAM 和 NODLL 編譯器選項編譯程式時。動態呼叫的程式在執行時載入到儲存器中。
廣告
