这个程序的流程是什么?

| 我遇到了一个令我困惑的cobol程序,这是包含代码的页面,它试图演示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     

要回复问题请先登录注册