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.