CALL 声明
COBOL 可以使用静态链接进行以下语句。对于编译时已知的所有外部符号,GnuCOBOL 默认使用动态链接,即使符号是文字:
CALL "subprogram" USING a b c *> run a (possibly static linked) sub program
*> passing three fields
CALL some-prog USING a b c *> some-prog is a PIC X item and can be changed
*> at run-time to do a dynamic lookup
此语句强制编译时链接编辑解析。 (非标准,语法扩展) :
CALL STATIC "subprogram" USING a b c
COBOL 中的字段可以传递 BY REFERENCE
(默认情况下,直到覆盖 - 覆盖是从左到右的顺序),BY CONTENT
(副本通过参考传递),或者在某些情况下直接传递给 BY VALUE
:
CALL "calculation" USING BY REFERENCE a BY VALUE b BY CONTENT c RETURNING d
ON EXCEPTION DISPLAY 'No linkage to "calculation"' UPON SYSERR
END-CALL
COBOL 被设计为 BY REFERENCE
语言,因此使用 BY VALUE
可能会出现问题。例如,字面数字没有显式类型,COBOL 规范没有明确的类型提升规则。因此,开发人员不得不担心使用 BY VALUE
文字进行调用框架设置。
有关详细信息,请参见 http://open-cobol.sourceforge.net/faq/index.html#call 。