开发手册 欢迎您!
软件开发者资料库

COBOL - 子程序

COBOL子程序 - 从基本概念到高级概念,简单易学地学习Cobol,包括概述,环境设置,程序结构,基本语法,数据类型,基本动词,数据布局,条件语句,循环语句,字符串处理,表格处理,文件处理,文件组织,文件访问模式,文件处理动词,子程序,内部排序,数据库接口,面试问题。

Cobol子程序是一个可以独立编译但不能独立执行的程序.有两种类型的子程序:内部子程序,如执行语句和外部子程序,如CALL动词.

调用动词

调用动词用于将控件从一个程序转移到另一个程序.包含CALL动词的程序是呼叫程序,被调用的程序称为被叫程序.调用程序执行将停止,直到被调用程序完成执行.在被叫程序中使用退出程序语句来传回控制.

被称为程序约束

以下是被调用的程序要求 :

  • 必须在被调用程序中定义链接部分.它由程序中传递的数据元素组成.数据项不应具有Value子句. PIC子句必须与通过调用程序传递的变量兼容.

  • 使用的程序划分有一个从中传递的变量列表调用程序和命令必须与Call动词中提到的相同.

  • 退出程序语句在被调用程序中使用将控制权转回.它必须是被调用程序中的最后一个语句.

参数可以通过两种方式在程序之间传递和减去;

  • 按参考

  • 按内容

按引用调用

如果修改了被调用程序中变量的值,则它们的新值将反映在调用程序中.如果未指定 BY 子句,则变量始终通过引用传递.

语法

以下是语法通过引用调用子例程 :

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


示例

以下示例是MAIN调用程序,UTIL是被调用程序 :

  IDENTIFICATION DIVISION.  PROGRAM-ID.主要.  DATA DIVISION. 工作 - 储存部分.  01 WS-STUDENT-ID PIC 9(4)价值1000.  01 WS-STUDENT-NAME PIC A(15)VALUE'Tim'. 程序部门.  CALL'UTIL'使用WS-STUDENT-ID,WS-STUDENT-NAME.  DISPLAY'学生ID:'WS-STUDENT-ID  DISPLAY'学生姓名:'WS-STUDENT-NAME  STOP RUN.


被叫程序

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-NAMESTOP RUN.


JCL 执行上述COBOL程序 :

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


当您编译并执行上述程序时,它会产生以下结果 :

In Called ProgramStudent Id : 1111Student 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-NAMESTOP 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 ProgramStudent Id : 1000Student Name : Tim


通话类型

有两种类型的通话和减号;

  • 静态调用在使用NODYNAM编译器选项编译程序时发生.在编译时将静态调用程序加载到存储中.

  • 动态调用在使用DYNAM和NODLL编译程序时发生编译选项.动态调用程序在运行时加载到存储中.