一起创业网-为互联网创业者服务

cobol调用子程序怎么调

在COBOL中,调用子程序可以通过静态调用(Static Call)或动态调用(Dynamic Call)两种方式实现。

静态调用(Static Call)

静态调用时,被调用的子程序必须与调用程序一起链接(link-edited)起来形成一个完整的装载模块(Load module)。

子程序可以单独编译,但调用时需要使用CALL LITERAL(文字常数)来说明。

使用COBOL的编译选项NODYNAM编译调用程序。

被调用程序必须由调用者进行连接编译,并与调用程序一起生成一个装载模块。

动态调用(Dynamic Call)

动态调用时,被调用的子程序必须编译和链接成一个独立的装载模块(Load module)。

子程序可以与主程序一起放到同一个装载模块库中。

使用CALL VARIABLE(变量)来说明。

不管COBOL编译是用DYNAM或NODYNAM选项,都是动态调用。

示例

静态调用示例

```cobol

WORKING-STORAGE SECTION.

01 MAIN-DATA.

05 TEST-NUM PIC 9(5).

PROCEDURE DIVISION.

MOVE 10 TO TEST-NUM.

CALL STATIC-SUB USING TEST-NUM.

DISPLAY TEST-NUM.

GOBACK.

STATIC-SUB.

WORKING-STORAGE SECTION.

01 PLUS-NUM PIC 9(5).

PROCEDURE DIVISION.

ADD TEST-NUM TO PLUS-NUM.

MOVE PLUS-NUM TO SYSTEM-OUTPUT.

GOBACK.

```

动态调用示例

```cobol

WORKING-STORAGE SECTION.

01 MAIN-DATA.

05 TEST-NUM PIC 9(5).

PROCEDURE DIVISION.

MOVE 10 TO TEST-NUM.

CALL DYNAMIC-SUB USING TEST-NUM.

DISPLAY TEST-NUM.

GOBACK.

DYNAMIC-SUB.

WORKING-STORAGE SECTION.

01 PLUS-NUM PIC 9(5).

PROCEDURE DIVISION.

ADD TEST-NUM TO PLUS-NUM.

MOVE PLUS-NUM TO SYSTEM-OUTPUT.

GOBACK.

```

参数传递

参数可以通过以下两种方式在程序之间传递:

按内容传递:

如果被调用程序中变量的值被修改,那么它们的新值将反映在调用程序中。

按引用传递:

如果BY子句未指定,则变量始终通过引用传递。

示例(按引用传递)

```cobol

WORKING-STORAGE SECTION.

01 MAIN-DATA.

05 TEST-NUM PIC 9(5).

05 REF-TEST-NUM REFSYSVAL.

PROCEDURE DIVISION.

MOVE 10 TO TEST-NUM.

CALL SUB-PROC USING TEST-NUM, REF-TEST-NUM.

DISPLAY TEST-NUM, REF-TEST-NUM.

GOBACK.

SUB-PROC.

WORKING-STORAGE SECTION.

01 PLUS-NUM PIC 9(5).

PROCEDURE DIVISION.

ADD TEST-NUM TO PLUS-NUM.

MOVE PLUS-NUM TO SYSTEM-OUTPUT.

GOBACK.

```

总结

在COBOL中,调用子程序可以通过静态调用或动态调用两种方式实现。静态调用需要将被调用程序与调用程序一起链接,而动态调用则需要将被调用程序编译和链接成一个独立的装载模块。参数可以通过按内容传递或按引用传递两种方式在程序之间传递。根据具体需求选择合适的调用方式和参数传递方式,可以有效地实现子程序之间的功能调用和数据传递。