PROCEDURE DIVISION
MAINPARA
DISPLAY "HELLO MAIN".
GO TO PARA1.
DISPLAY " SECOND DISPLAY".
STOP RUN.
PARA1.
DISPLAY " I AM IN PARA1".
PARA2.
DISPLAY "I AM IN PARA2"
....
PARA200
我对流程了解不多。但是,我很困惑。当控件跳转到GO TO PARA1
时,它将执行PARA1
。
现在我的问题是:
PARA2
并返回MAINPARA
? PARA2
执行到程序结束吗?我不是COBOL程序员,我需要了解迁移工具/进程AMXW COBOL的代码。目标系统是IBM AS / 400。
答案 0 :(得分:6)
您的程序将显示:
HELLO MAIN
I AM IN PARA1
I AM IN PARA2
...
因为GO TO
移动了程序的执行点。然后它顺序执行,从那里移动到。
如果用GO TO
动词替换PERFORM
动词,则在此对话框中,程序:
PROCEDURE DIVISION
MAINPARA
DISPLAY "HELLO MAIN".
PERFORM PARA1.
DISPLAY " SECOND DISPLAY".
STOP RUN.
PARA1.
DISPLAY " I AM IN PARA1".
PARA2.
DISPLAY "I AM IN PARA2"
....
PARA200
会显示:
HELLO MAIN
I AM IN PARA1
SECOND DISPLAY
答案 1 :(得分:5)
GO TO
语句永久将执行从程序的一个部分转移到程序的另一部分。在GO TO PARA1
之后,执行将跳转到PARA1
标签,执行以下段落,然后从那里继续。
<强>输出:强>
HELLO MAIN
I AM IN PARA1
I AM IN PARA2
.
.
I AM IN PARA200
因此,执行将继续,直到遇到STOP RUN
语句或运行时错误。
注意: GO TO
语句通常被视为不良做法。跟踪GO TO
语句可以说的位置变得更加困难。我建议改用PERFORM
。它将控制返回到执行过程后的位置。
答案 2 :(得分:2)
GO TO转移控制标记的para和control不回来。 所以,你的输出将是:
HELLO MAIN
I AM IN PARA1
I AM IN PARA2
...
答案 3 :(得分:1)
正如@Tamer Tas指出的那样,CO TO中的GO TO将控制转移到指定的标签,即GO TO中指定的段落或部分。在您在问题中提供的代码中,输出将是
HELLO MAIN
I AM IN PARA1
I AM IN PARA2
等等,直到遇到GOBACK或STOP RUN。如果没有遇到这些问题,您的程序将以不可预测的方式终止。
强烈劝阻GO TO;即便如此,你会看到现代代码中使用的GO TO。一个人为的代码示例......
[...]
Perform 100-DO-IT Through 100-DO-IT-EXIT
[...]
GOBACK.
100-DO-IT.
If A < B
GO TO 100-DO-IT-EXIT
End-If
Compute C = A - B
.
100-DO-IT-EXIT.
Exit.
显然,If语句是微不足道的,可以通过将100-EDIT之外的If移动到那里转移控制的Perform来避免GO TO。当控制逻辑很复杂时,程序员必须问自己,如果推动这个控制逻辑,代码中的“向上”或“向下”是多少。
这种特殊的编码风格有其支持者;我不是其中之一。
答案 4 :(得分:1)
COBOL中的GO TO
与C中的GO TO
相同。
在您的示例中,GO TO将处理顺序所有指令,直到程序结束。
如果您希望它只执行PARA1,您可以使用PERFORM PARA1
语句。
如果您想要执行更多段落,但直到程序结束,您可以使用PERFORM THRU
构造。通过使用perform,程序将在段落执行后返回。
另外,请记住,在许多地方(公司环境),您不能使用GO TO
,因为它会产生许多难以理解的代码。此外,无限循环的可能性相当大。