COBOL - podprogramy

Podprogram Cobol to program, który może być kompilowany niezależnie, ale nie może być wykonywany niezależnie. Istnieją dwa rodzaje podprogramów:internal subroutines lubić Perform oświadczenia i external podprogramy, takie jak czasownik CALL.

Call Verb

Czasownik wywołania służy do przenoszenia kontroli z jednego programu do innego programu. Program zawierający czasownik CALL toCalling Program a wywoływany program jest znany jako Called Program. Wykonywanie programu wywołującego zostanie wstrzymane, dopóki wywoływany program nie zakończy wykonywania. Instrukcja Exit Program jest używana w wywołanym programie do przekazania sterowania z powrotem.

Nazwane ograniczenia programu

Poniżej przedstawiono zwane wymagania programu -

  • Linkage sectionmusi być zdefiniowana w wywołanym programie. Składa się z elementów danych przekazanych w programie. Pozycje danych nie powinny mieć klauzuli wartości. Klauzula PIC musi być zgodna ze zmiennymi przekazywanymi przez program wywołujący.

  • Procedure division using ma listę zmiennych przekazanych z programu wywołującego, a kolejność musi być taka sama, jak podano w czasowniku Call.

  • Exit programinstrukcja jest używana w wywołanym programie do przekazania sterowania z powrotem. Musi to być ostatnia instrukcja w wywołanym programie.

Parametry można przekazywać między programami na dwa sposoby -

  • Według odniesienia
  • Według treści

Zadzwoń przez numer referencyjny

Jeśli wartości zmiennych w wywołanym programie zostaną zmodyfikowane, to ich nowe wartości zostaną odzwierciedlone w programie wywołującym. JeśliBY klauzula nie jest określona, ​​wtedy zmienne są zawsze przekazywane przez odwołanie.

Składnia

Poniżej znajduje się składnia wywoływania podprogramu przez odniesienie -

CALL sub-prog-name USING variable-1, variable-2.

Example

Poniższy przykład to GŁÓWNY program wywołujący, a UTIL to wywoływany program -

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.

Program o nazwie

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 aby wykonać powyższy program w języku COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN

Kiedy kompilujesz i wykonujesz powyższy program, daje on następujący wynik -

In Called Program
Student Id : 1111
Student Name : Tim

Zadzwoń według zawartości

Jeśli wartości zmiennych w wywoływanym programie zostaną zmodyfikowane, to ich nowe wartości nie zostaną odzwierciedlone w programie wywołującym.

Składnia

Poniżej znajduje się składnia wywoływania podprogramu według zawartości -

CALL sub-prog-name USING 
BY CONTENT variable-1, BY CONTENT variable-2.

Example

Poniższy przykład to GŁÓWNY program wywołujący, a UTIL to wywoływany program -

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.

Program o nazwie

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 aby wykonać powyższy program w języku COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN

Kiedy kompilujesz i wykonujesz powyższy program, daje on następujący wynik -

In Called Program
Student Id : 1000
Student Name : Tim

Rodzaje połączeń

Istnieją dwa rodzaje połączeń -

  • Static Callwystępuje, gdy program jest kompilowany z opcją kompilatora NODYNAM. Statyczny wywołany program jest ładowany do pamięci w czasie kompilacji.

  • Dynamic Callwystępuje, gdy program jest kompilowany z opcją kompilatora DYNAM i NODLL. Dynamiczny wywołany program jest ładowany do pamięci w czasie wykonywania.