cobol - 这个程序的流程是什么?

标签 cobol

我遇到了一个让我困惑的cobol程序,this是包含代码的页面,它试图演示 ALTER 有多么糟糕,但同时我不理解程序流程。

     PERFORM 2100-PROCESS-RECORD THRU 2199-EXIT.
...
 2100-PROCESS-RECORD. 
     GO TO 2110-PROCESS-HEADER.
*
 2110-PROCESS-HEADER.
* code to process a file header
     ALTER 2100-PROCESS-RECORD TO 2120-PROCESS-DETAIL.
     GO TO 2199-EXIT.
*
 2120-PROCESS-DETAIL.
* code to process a detail record 
     GO TO 2199-EXIT.
...
*
 2199-EXIT.
     EXIT.

在我看来,流程是这样的:

     PERFORM 2100-PROCESS-RECORD THRU 2199-EXIT.
...
 2100-PROCESS-RECORD. 
     GO TO 2110-PROCESS-HEADER.
*
 2110-PROCESS-HEADER.
* code to process a file header
     ALTER 2100-PROCESS-RECORD TO 2120-PROCESS-DETAIL.
     GO TO 2199-EXIT.

 2199-EXIT.
     EXIT.

如果 ALTER 是要更改 GO-TO 的目标,那么如果 GO-TO 已经执行并且程序退出了,那么它还有什么用呢?

最佳答案

http://home.swbell.net/mck9/cobol/style/alter.html解释它。您对于第一次执行是正确的,但是在后续运行中,行为发生了变化:

“我们第一次执行 PERFORM 时,控制权通过 2110-PROCESS-HEADER。但是,该段落末尾的 ALTER 更改了 2100-PROCESS-RECORD 中 GO TO 的目的地。因此, PERFORM 的所有后续执行,控制不会通过 2110-PROCESS-HEADER。而是通过 2120-PROCESS-DETAIL。

“潜在的困惑是显而易见的。更改后的 GO TO 并没有去到它声称要去的地方——相反,它去到了一些远程代码片段中指定的地方。要理解代码是如何工作的,你需要知道ALTER 存在,并且您需要知道执行 ALTER 的所有情况。”

这就是所谓的自修改代码,很难理解和调试。对于睡前一些轻松的阅读,我建议 http://www.pbm.com/~lindahl/mel.html梅尔的故事。

在 Cobol 中,EXIT 语句意味着“退出程序”:http://publib.boulder.ibm.com/infocenter/iadthelp/v6r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/evfeb4ls124.htm

关于cobol - 这个程序的流程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6340573/

相关文章:

cobol - STRING 动词的行为

c - 在 C 中实现 COBOL REDEFINES

notepad++ - 如何使用 Notepad++ 为 Cobol 和 JCl 自动缩进

java - 从 COBOL 文件生成属性名称

cobol - 出现错误不太确定为什么这是我的第一个 cobol 程序

c# - COM 互操作 : Variable number of parameters

cobol - 嵌套执行需要并且不需要结束执行

sql-server - 将数据插入 SQL Server 返回错误代码 00q

variables - COBOL:打印其中包含变量的行

java - 将具有可变长度记录的文件转换为Java中的固定长度记录