我遇到了一个让我困惑的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/