当主调用程序进行子程序调用时,通常需要向子程序传递参数。主调用程序所传递的参数一般情况下,可以为在该程序内所定义的任何数据。通常,这些数据可以在主调用程序数据部的以下几个节中进行定义。
q 文件节:此时在FD语句下面进行定义,数据内容通过读取相关文件得到。
q 工作存储节:在该节内可直接进行定义,数据内容通过在程序的处理过程中得到。
q 连接节:在该节内的定义方式同在工作存储节类似,但数据内容通过其他程序所传递的参数得到。并且,这些数据将作为该主调用程序的参数再次传递给其所调用的程序。
下面首先来看一个主调用示例程序,重点看里面的参数定义,代码如下。
IDENTIFICATION DIVISION.
PROGRAM-ID CALLING-PROG.
AUTHER XXX.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING STORAGE SECTION.
01 PARM-GROUP.
05 PARM1 PIC X.
05 PARM2 PIC X(7).
05 PARM3 PIC 99.
77 PARM-NUMBER PIC 9(5).
……
*
PROCEDURE DIVISION.
……
STOP RUN.
可以看到,以上主调用程序CALLING-PROG中的参数数据都是在工作存储节内定义的。关于主调用程序中的参数,主要有以下几点需要注意。
q 用于传递的参数通常必须定义在01层或77层。例如,以上程序中的参数PARM-GROUP就定义在01层,而参数PARM-NUMBER则定义在77层。
q 在主程序中定义的参数与该参数所定义的位置和顺序是有关系的。例如,以上程序中参数PARM-GROUP是在参数PARM-NUMBER前面进行定义的。这种顺序通常不可更改。
q 参数是在主调用程序中被分配存储空间的,而并不在被调用程序中进行分配。例如,以上程序中共分配10个字节大小的存储空间给第一个参数。而第二个参数则被分配5个字节大小的存储空间。
q 在程序调用的参数传递过程中,缺省情况下所传递的是参数的地址,而并不是参数的内容。因此,可以通过被调用程序改变该参数的实际内容。
q COBOL程序将自动把最后一个参数的高位置为1,作为参数传递的结束标志。以此,COBOL程序便可支持变长参数队列的传递。