COBOL - Unterprogramme
Das Cobol-Unterprogramm ist ein Programm, das unabhängig kompiliert, aber nicht unabhängig ausgeführt werden kann. Es gibt zwei Arten von Unterprogrammen:internal subroutines mögen Perform Aussagen und external Unterprogramme wie CALL Verb.
Rufen Sie Verb auf
Das Aufrufverb wird verwendet, um die Steuerung von einem Programm auf ein anderes Programm zu übertragen. Das Programm, das das CALL-Verb enthält, ist dasCalling Program und das aufgerufene Programm ist als das bekannt Called Program. Das Aufrufen der Programmausführung wird angehalten, bis das aufgerufene Programm die Ausführung beendet hat. Die Anweisung Programm beenden wird im aufgerufenen Programm verwendet, um die Steuerung zurück zu übertragen.
Aufgerufene Programmbeschränkungen
Es folgen die genannten Programmanforderungen -
Linkage sectionmuss im aufgerufenen Programm definiert werden. Es besteht aus Datenelementen, die im Programm übergeben werden. Die Datenelemente sollten keine Value-Klausel enthalten. Die PIC-Klausel muss mit den Variablen kompatibel sein, die über das aufrufende Programm übergeben werden.
Procedure division using hat eine Liste von Variablen, die vom aufrufenden Programm übergeben wurden, und die Reihenfolge muss mit der im Aufrufverb angegebenen übereinstimmen.
Exit programDie Anweisung wird im aufgerufenen Programm verwendet, um die Steuerung zurück zu übertragen. Es muss die letzte Anweisung im aufgerufenen Programm sein.
Die Parameter können auf zwei Arten zwischen Programmen übergeben werden:
- Durch Bezugnahme
- Nach Inhalt
Call By Reference
Wenn die Werte von Variablen im aufgerufenen Programm geändert werden, werden ihre neuen Werte im aufrufenden Programm wiedergegeben. WennBY Wenn keine Klausel angegeben ist, werden Variablen immer als Referenz übergeben.
Syntax
Es folgt die Syntax zum Aufrufen des Unterprogramms als Referenz -
CALL sub-prog-name USING variable-1, variable-2.
Example
Das folgende Beispiel ist das MAIN-Aufrufprogramm und UTIL ist das aufgerufene Programm -
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.
Aufgerufenes Programm
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.
JCL um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
In Called Program
Student Id : 1111
Student Name : Tim
Call By Content
Wenn die Werte von Variablen im aufgerufenen Programm geändert werden, werden ihre neuen Werte im aufrufenden Programm nicht wiedergegeben.
Syntax
Es folgt die Syntax zum Aufrufen des Unterprogramms nach Inhalt -
CALL sub-prog-name USING
BY CONTENT variable-1, BY CONTENT variable-2.
Example
Das folgende Beispiel ist das MAIN-Aufrufprogramm und UTIL ist das aufgerufene Programm -
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.
Aufgerufenes Programm
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.
JCL um das obige COBOL-Programm auszuführen -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:
In Called Program
Student Id : 1000
Student Name : Tim
Arten von Anrufen
Es gibt zwei Arten von Anrufen:
Static Calltritt auf, wenn ein Programm mit der Compileroption NODYNAM kompiliert wird. Ein statisch aufgerufenes Programm wird zur Kompilierungszeit in den Speicher geladen.
Dynamic Calltritt auf, wenn ein Programm mit der Compileroption DYNAM und NODLL kompiliert wird. Ein dynamisch aufgerufenes Programm wird zur Laufzeit in den Speicher geladen.