这个程序的流程是什么?

时间:2011-06-14 07:48:18

标签: cobol

我遇到了一个令我困惑的cobol程序,this是包含代码的页面,它试图证明ALTER有多糟糕,但同时我不理解程序流程。< / p>

     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已经执行且程序已退出,该怎么有用呢?

1 个答案:

答案 0 :(得分:5)

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 Mel的故事。

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