精通COBOL--11.5.2 静态调用程序示例
来源:互联网 发布:pc蛋蛋历史开奖数据 编辑:程序博客网 时间:2024/06/05 01:51
下面通过具体的程序示例,以便更好地说明静态调用的特点及用法。首先,假设在静态调用中,某一主程序代码如下。
IDENTIFICATION DIVISION.
PROGRAM-ID STATIC-MAIN.
AUTHER XXX.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING STORAGE SECTION.
77 TEST-NUM PIC 99.
*
PROCEDURE DIVISION.
PERFORM INIT-TEST-NUM.
CALL ‘STATIC-SUB’ USING TEST-NUM.
DISPLAY ‘TEST-NUM AFTER THE FIRST CALL: ’ TEST-NUM.
PERFORM INIT-TEST-NUM.
CALL ‘STATIC-ENTRY’ USING TEST-NUM.
DISPLAY ‘TEST-NUM AFTER THE SECOND CALL: ’ TEST-NUM.
STOP RUN.
INIT-TEST-NUM.
MOVE 10 TO TEST-NUM.
令该程序的子程序,即与之所对应的被调用程序STATIC-SUB的代码如下。
IDENTIFICATION DIVISION.
PROGRAM-ID STATIC-SUB.
AUTHER XXX.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING STORAGE SECTION.
01 PLUS-NUM PIC 99 VALUE 15.
LINKAGE SECTION.
77 MAIN-NUM PIC 99.
*
PROCEDURE DIVISION USING MAIN-NUM.
ADD MAIN-NUM TO PLUS-NUM.
MOVE PLUS-NUM TO MAIN-NUM.
GOBACK.
ENTRY ‘STATIC-ENTRY’ USING MAIN-NUM.
ADD MAIN-NUM TO PLUS-NUM.
MOVE PLUS-NUM TO MAIN-NUM.
GOBACK.
以上程序运行后,将有如下输出结果。
TEST-NUM AFTER THE FIRST CALL: 25
TEST-NUM AFTER THE SECOND CALL: 35
这是因为,在第一次调用前,子程序中的变量PLUS-NUM通过VALUE语句初始化为15。将该变量中的15和主程序中所传递的参数TEST-NUM中的10相加后,结果将为25。并且,此时子程序中的变量PLUS-NUM在相加运算结束后已由15变成了25。
当进行第二次调用时,子程序为第一次调用结束后的状态。此时,子程序中的变量PLUS-NUM为25,而并非如第一次调用前的15。虽然第二次实际上仍然是对于子程序STATIC-SUB的调用,但此时该程序中的数据已不同了。第二次调用是将PLUS-NUM中的25和TEST-NUM中的10相加,因此最终结果为35。
若要希望两次调用时子程序的状态都一致,则需要在子程序中进行相应的初始化。此处所说的初始化通常是指在该程序中的每一个入口地址后,对工作存储节中的本地数据进行初始化。进行初始化后的子程序如下。
IDENTIFICATION DIVISION.
PROGRAM-ID STATIC-SUB.
AUTHER XXX.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING STORAGE SECTION.
01 PLUS-NUM PIC 99 VALUE 15.
LINKAGE SECTION.
77 MAIN-NUM PIC 99.
*
PROCEDURE DIVISION USING MAIN-NUM.
PERFORM INIT-PLUS-NUM.
ADD MAIN-NUM TO PLUS-NUM.
MOVE PLUS-NUM TO MAIN-NUM.
GOBACK.
ENTRY ‘STATIC-ENTRY’ USING MAIN-NUM.
PERFORM INIT-PLUS-NUM.
ADD MAIN-NUM TO PLUS-NUM.
MOVE PLUS-NUM TO MAIN-NUM.
GOBACK.
INIT-PLUS-NUM.
MOVE 15 TO PLUS-NUM.
仍然采用前面的主程序对以上子程序进行调用,则运行后的结果将如下。
TEST-NUM AFTER THE FIRST CALL: 25
TEST-NUM AFTER THE SECOND CALL: 25
总之,静态调用的程序每次调用前都为其上一次调用后的状态。这一点是关于静态调用最需注意的地方,一定要牢记。
- 精通COBOL--11.5.2 静态调用程序示例
- 精通COBOL--11.6.2 动态调用程序示例
- 精通COBOL--11.5 静态调用
- 精通COBOL--11.5.1 静态调用的基本概念
- 精通COBOL--11.4 被调用程序
- 精通COBOL--16.5 CICS中的程序调用
- 精通COBOL--11.3.2 主调用程序中的调用过程
- 精通COBOL--11.4.2 被调用程序中参数的引用
- 精通COBOL--16.5.2 使用XCTL命令进行程序调用
- 精通COBOL--11.2.2 子程序的调用顺序
- 精通COBOL--11.6 动态调用
- 精通COBOL--11.4.1 被调用程序中参数的定义
- 精通COBOL--11.4.3 被调用程序中的入口地址
- 精通COBOL--16.5.1 使用LINK命令进行程序调用
- 精通COBOL--第11章 子程序调用
- 精通COBOL--11.1 子程序调用的作用
- 精通COBOL--11.2 子程序调用的特点
- 精通COBOL--11.6.1 动态调用的基本概念
- 看得让你感动一分钟的
- web项目经理手册-需求变更管理
- 在C++中 char 与 unsigned char的具体区别?_百度知道
- HTTP状态代码及其定义,Ajax捕捉回调错误参考
- 深入分析MFC中的CArray类
- 精通COBOL--11.5.2 静态调用程序示例
- web项目经理手册-Code Review
- 受人民币升值影响 软件业利润同比降4.6%
- web项目经理手册-开发时间估算
- web项目经理手册-版本控制流程
- 精通COBOL--11.6 动态调用
- [转]数据库中三大问题约束、CASE语句和文件
- java数据库设计中的14个技巧
- web项目经理手册