CALL 语句
CALL 语句将控制从一个程序传输到运行单元中的另一个程序。
包含 CALL 语句的程序是调用程序; CALL 语句中标识的程序是被调用的子程序。 调用程序必须在要调用另一个程序的位置包含 CALL 语句。
在 ILE COBOL 中,子程序可以是 COBOL 程序、用另一种 IBM i 语言编写的程序或 ILE 过程。
CALL 语句的处理将控制权传递给被调用子程序的第一个非声明指令。 控制在 CALL 语句之后的指令处返回到调用程序。 如果被调用子程序在 "过程部分" 中没有过程部分或非声明部分,那么被调用子程序将发出隐式 EXIT PROGRAM。
每当程序控制由 CALL 语句传输并且被调用程序直接或间接执行其调用者时,就会进行 递归 调用。 使用 RECURSIVE 属性定义的程序可以执行直接或间接执行自身的 CALL 语句。 ILE COBOL 不允许在非递归程序中使用递归。 如果尝试对非递归程序进行递归,那么将生成运行时错误消息。 有关调用程序以及相关概念和术语的更多信息,请参阅 IBM Rational® Development Studio for i :ILE COBOL 程序员指南。
RETURN-CODE 专用寄存器可用于将返回码信息从程序传递到其调用者。 请参阅 RETURN-CODE 专用寄存器 以获取更多信息。
CALL 语句处理将控制权传递给被调用的子程序。 如果 CALL 语句具有程序对象的链接,并且 CALL 语句在运行时将指定库中不存在的程序命名,那么将发出错误消息。 可以使用 ON EXCEPTION 或 OVERFLOW 短语来指定错误处理过程。
第一次在运行单元中调用被调用子程序时,该子程序处于其初始状态。 在 CANCEL 语句之后首次调用它时,它也处于初始状态。
如果程序是初始程序 (如果其 PROGRAM-ID 段包含 INITIAL 子句) ,那么每次调用该程序时该程序都处于初始状态。 在被调用的子程序中的所有其他条目上,子程序处于其上次使用的状态,但 PERFORM 语句控制机制的情况除外; 这些状态始终设置为其初始状态。
每当发生隐式或显式 STOP RUN 时, Languages and Utilities 返回码都设置为 0。 否则,将其设置为 2。 将 RETURN-CODE 寄存器复制到工作控制块的用户部分。 请参阅 CL Programming 一书中的 RTVJOBA 和 DSPJOB 命令,以获取有关返回码的更多信息。
在任何 COBOL 程序的处理开始时,以及在调用另一个程序之前,用户返回代码被设置为 0。
- identifier-1
- 必须是字母数字或过程指针数据项。对于字母数字数据项,以下规则适用:
- 如果链接指向程序对象,那么 identifier-1 的内容必须符合构成程序名的规则。 identifier-1 的前 10 个字符用于在调用程序和被调用程序之间建立对应关系。
- 如果链接到某个过程,那么将使用 identifier-1 的前 256 个字符。 被调用过程必须与调用过程位于同一编译单元中。
- 根据编译器选项 *MONOPRC , identifier-1 的内容可能需要大写并符合构成程序名的规则。
过程指针数据项必须设置为在 CALL 之前使用 SET 语句的程序或过程的地址。 有关设置过程-指针数据项的信息,请参阅 格式 6-过程-指针数据项。
- literal-1
- CALL 链接确定调用的程序类型,因此也会限制 literal-1的内容和大小。 所建立的链接是与程序对象或 ILE 过程的链接。 如果链接到程序对象,那么 literal-1 必须是非数字大写 (扩展系统名称除外) ,并且必须符合程序名的构成规则。 字面值的前 10 个字符用于在调用程序和被调用子程序之间进行对应。 Literal-1 可以包含扩展名称。
如果链接至 ILE 过程,那么 literal-1 必须是非数字且长度最多为 256 个字符。 根据编译器选项 *MONOPRC , literal-1 可能需要大写并符合程序名的构成规则。 文字必须指定被调用子程序的程序名。
