精通COBOL--11.4.2 被调用程序中参数的引用

  被调用程序是在过程部标志PROCEDURE DIVISION后实现参数引用的。引用方式仍然是通过USING语句。实际上,这种引用方式在前面的被调用程序代码中已有所涉及。此处不妨以上一小节中的被调用程序为例,重点关注其对于参数的引用。该程序代码如下。

IDENTIFICATION   DIVISION.

PROGRAM-ID      CALLED-PROG.

AUTHER           XXX.

*

ENVIRONMENT   DIVISION.

*

DATA  DIVISION.

WORKING STORAGE SECTION.

……

LINKAGE SECTION.

77   PARM-NUM   PIC 9(5).

01   PARM-LIST.

     05   PM1     PIC  X(8).

     05   PM2     PIC  XX.

*

PROCEDURE   DIVISION  USING  PARM-LIST  PARM-NUM.

……

GOBACK.

关于以上被调用程序中的参数引用,主要有以下两点需要注意。

1.参数引用的顺序必须和主调用程序中相应参数的定义一致

前面曾提到,在被调用程序中,参数只用主调用程序中对应的参数空间大小定义为一致。其他的诸如命名方式、数据类型、组织结构都可不同。但是,并不可能只根据大小便将两个程序中的参数相对应起来。因为各程序中的参数之间有可能很多大小是相同的。

因此,为将两程序间的参数相对应起来,必须通过被调用程序中参数的引用顺序来实现。对于以上被调用程序,由于其主程序中的参数是按如下顺序定义的。

01   PARM-GROUP.

     05   PARM1    PIC  X.

     05   PARM2    PIC  X(7).

     05   PARM3    PIC  99.

 77   PARM-NUM     PIC 9(5).

其中参数PARM-GROUP在前,参数PARM-NUM在后。而在此处的被调用程序中,参数PARM-LIST是和PARM-GROUP对应的,参数PARM-NUMPARM-NUM对应。因此,在引用时,应该根据顺序,将PARM-LIST放在前面,PARM-NUM放在后面。如此,便实现了被调用程序和主调用程序间参数的一一对应。

2.引用的参数名为被调用程序中的参数名,但内容则为主调用程序中的参数

对于以上被调用程序,所引用的参数名PARM-LISTPARM-NUM都是在连接节内所定义的。然而,前面曾提到,参数在被调用程序中是不被分配存储空间的。因此,以上引用的参数名虽然为该被调用程序中所定义的,但实际内容则为主调用程序中的参数。

这种方式实际上使被调用程序被多个主调用程序所调用成为可能。例如,仍然保持以上被调用程序代码不变,可使用另一个主调用程序对其进行调用。不妨假设新的主调用程序代码如下。

IDENTIFICATION   DIVISION.

PROGRAM-ID      NEW-CALLING-PROG.

AUTHER           XXX.

*

ENVIRONMENT   DIVISION.

*

DATA  DIVISION.

WORKING STORAGE SECTION.

01   NEW-GROUP.

     05   NEW1    PIC  9(9).

     05   NEW3    PIC  X.

 77   NEW-NUM     PIC  X(5).

……

*

PROCEDURE   DIVISION.

……

CALL   ‘CALLED-PROG’   USING   NEW-LIST

                                    PARM-NUM.

……

STOP RUN.

对于以上主调用程序,此时该被调用程序中所引用的参数将有所不同。此时,被调用程序中,参数PARM-LIST将对应参数NEW-GROUP。而参数PARM-NUM将对应参数NEW-NUM。这样,对于不同的主调用程序,将有不同的参数引用。而被调用程序的代码则始终不变。以此,便实现了被调用程序的一次编写,多次调用。

你可能感兴趣的:(精通COBOL--11.4.2 被调用程序中参数的引用)