这个程序的流程是什么?

lam*_*988 2 cobol

我遇到了一个让我困惑的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.
Run Code Online (Sandbox Code Playgroud)

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

     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.
Run Code Online (Sandbox Code Playgroud)

如果ALTER要更改GO-TO的目的地,如果GO-TO已经执行并退出程序,它如何有用?

jco*_*ctx 5

http://home.swbell.net/mck9/cobol/style/alter.html解释了它.你第一次执行是正确的,但在后续运行中行为改变了:

"我们第一次执行PERFORM时,控制权通过2110-PROCESS-HEADER.然而,该段末尾的ALTER改变了GO-2100的目的地 - 在进程记录中.因此,在所有后续执行中PERFORM,控制不通过2110-PROCESS-HEADER.它通过2120-PROCESS-DETAIL代替.

"混淆的可能性是显而易见的.改变后的GO TO并没有达到它声称要去的地方 - 相反,它会转到某些远程代码段中指定的位置.要了解代码是如何工作的,你需要知道ALTER存在,你需要知道执行ALTER的所有情况."

它被称为自修改代码,并且很难理解和调试.对于睡前的一些轻读,我推荐http://www.pbm.com/~lindahl/mel.html梅尔的故事.

用Cobol,退出声明并不能意味着"退出计划":http://publib.boulder.ibm.com/infocenter/iadthelp/v6r0/index.jsp?topic=/com.ibm.etools.iseries.langref. DOC/evfeb4ls124.htm