Подпрограмма Cobol — это программа, которая может быть скомпилирована независимо, но не может быть выполнена независимо. Существует два типа подпрограмм: внутренние подпрограммы, такие как операторы Perform, и внешние подпрограммы, такие как глагол CALL.
Позвонить глагол
Глагол вызова используется для передачи управления из одной программы в другую. Программа, которая содержит глагол CALL, является вызывающей программой, а вызываемая программа называется вызываемой программой . Выполнение вызывающей программы будет остановлено, пока вызываемая программа не завершит выполнение. Оператор выхода из программы используется в вызываемой программе для передачи управления обратно.
Названные ограничения программы
Ниже перечислены требования к программам.
-
Раздел связывания должен быть определен в вызываемой программе. Он состоит из элементов данных, передаваемых в программе. Элементы данных не должны иметь предложения Value. Предложение PIC должно быть совместимо с переменными, передаваемыми через вызывающую программу.
-
Разделение процедур с использованием имеет список переменных, переданных из вызывающей программы, и порядок должен быть таким же, как указано в глаголе вызова.
-
Оператор выхода из программы используется в вызываемой программе для возврата управления. Это должно быть последнее утверждение в вызываемой программе.
Раздел связывания должен быть определен в вызываемой программе. Он состоит из элементов данных, передаваемых в программе. Элементы данных не должны иметь предложения Value. Предложение PIC должно быть совместимо с переменными, передаваемыми через вызывающую программу.
Разделение процедур с использованием имеет список переменных, переданных из вызывающей программы, и порядок должен быть таким же, как указано в глаголе вызова.
Оператор выхода из программы используется в вызываемой программе для возврата управления. Это должно быть последнее утверждение в вызываемой программе.
Параметры могут быть переданы между программами двумя способами —
- По ссылке
- По содержанию
Звонок по ссылке
Если значения переменных в вызываемой программе изменены, то их новые значения будут отражены в вызывающей программе. Если предложение 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.
JCL для выполнения вышеуказанной программы COBOL —
//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.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = MAIN
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
In Called Program Student Id : 1000 Student Name : Tim
Типы звонков
Есть два типа звонков —
Статический вызов происходит, когда программа компилируется с опцией компилятора NODYNAM. Статическая вызываемая программа загружается в хранилище во время компиляции.
Динамический вызов происходит, когда программа компилируется с опцией компилятора DYNAM и NODLL. Динамически вызываемая программа загружается в хранилище во время выполнения.