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.