Учебники

КОБОЛ — Подпрограммы

Подпрограмма 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. Динамически вызываемая программа загружается в хранилище во время выполнения.