CALL 语句

CALL 语句将控制从一个程序传输到运行单元中的另一个程序。

包含 CALL 语句的程序是调用程序; CALL 语句中标识的程序是被调用的子程序。 调用程序必须在要调用另一个程序的位置包含 CALL 语句。

IBM 扩展

ILE COBOL 中,子程序可以是 COBOL 程序、用另一种 IBM i 语言编写的程序或 ILE 过程。

IBM 扩展结束

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。

相关信息:

CALL 语句-格式 1

读取语法图跳过可视语法图 CALLidentifier-1LINKAGE1TYPEISenvironment-name-1PROGRAMPROGRAM1literal-1INLIBRARY1identifier-5literal-4USINGBY 短语ON EXCEPTION 短语NOT ON EXCEPTION 短语ONOVERFLOW命令 statement-3END-CALL
BY 短语
读取语法图跳过可视语法图BYREFERENCEADDRESS OF1identifier-2file-name-11BYCONTENTADDRESS OF1LENGTH OF1identifier-2literal-21file-name-11
ON EXCEPTION 短语
读取语法图跳过可视语法图 ONEXCEPTION命令 statement-1
NOT ON EXCEPTION 短语
读取语法图跳过可视语法图NOTON EXCEPTION命令 statement-2
注:
  • 1 IBM® 扩展

CALL 语句-格式 2

读取语法图跳过可视语法图 CALLidentifier-1LINKAGE1TYPEISenvironment-name-1PROCEDUREPROCEDURE1literal-1USINGBY 短语RETURNING1GIVING1INTOADDRESS OFidentifier-4ON EXCEPTION 短语NOT ON EXCEPTION 短语ONOVERFLOW命令 statement-3END-CALL
BY 短语
读取语法图跳过可视语法图BYREFERENCEADDRESS OF1identifier-2file-name-11OMITTED1BYCONTENTADDRESS OF1LENGTH OF1identifier-2literal-21file-name-11OMITTED1BY VALUE 短语
BY VALUE 短语
读取语法图跳过可视语法图BYVALUE1 ADDRESS OFLENGTH OFidentifier-3literal-3float-literal-1integer-1SIZE IS 短语
SIZE IS 短语
读取语法图跳过可视语法图SIZEISinteger-2
ON EXCEPTION 短语
读取语法图跳过可视语法图 ONEXCEPTION命令 statement-1
NOT ON EXCEPTION 短语
读取语法图跳过可视语法图NOTON EXCEPTION命令 statement-2
注:
  • 1 IBM 扩展
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 可能需要大写并符合程序名的构成规则。 文字必须指定被调用子程序的程序名。