Ibm midrange 在COBOL中如何控制流?
我不太了解流程。但是,我很困惑。当控件跳转到Ibm midrange 在COBOL中如何控制流?,ibm-midrange,cobol,Ibm Midrange,Cobol,我不太了解流程。但是,我很困惑。当控件跳转到转到PARA1时,它将执行PARA1 现在我的问题是: 它将执行PARA2并返回到MAINPARA 或者它会在程序结束时从PARA2执行吗 我不是COBOL程序员,我需要理解来自迁移工具/过程AMXW COBOL的代码。目标系统是IBM AS/400。转到语句永久地将执行从程序的一部分转移到另一部分。在转到PARA1后,执行将跳转到PARA1标签,执行以下段落,然后从那里继续 输出: PROCEDURE DIVISION MAINPARA DI
转到PARA1
时,它将执行PARA1
现在我的问题是:
PARA2
并返回到MAINPARA
李>
PARA2
执行吗我不是COBOL程序员,我需要理解来自迁移工具/过程AMXW COBOL的代码。目标系统是IBM AS/400。
转到
语句永久地将执行从程序的一部分转移到另一部分。在转到PARA1
后,执行将跳转到PARA1
标签,执行以下段落,然后从那里继续
输出:
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
因此,执行将继续,直到遇到停止运行
语句或运行时错误
注意:
转到
语句通常被认为是不好的做法,这是有原因的。可以说,跟踪转到哪里
语句变得更加困难。我建议改为使用PERFORM
。执行过程后,将控制权返回到原来的位置。您的程序将显示:
HELLO MAIN
I AM IN PARA1
I AM IN PARA2
.
.
I AM IN PARA200
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
I AM IN PARA2
...
将显示:
HELLO MAIN
I AM IN PARA1
I AM IN PARA2
.
.
I AM IN PARA200
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
正如@Tamer Tas所指出的,COBOL中的GO TO将控制权转移到命名标签,即GO TO中命名的段落或部分。在您在问题中提供的代码中,输出将是
HELLO MAIN
I AM IN PARA1
SECOND DISPLAY
依此类推,直到遇到回退或停止运行。如果两者都没有遇到,您的程序将以不可预知的方式终止
去学校是强烈劝阻的;即使如此,您也会看到GO在现代代码中使用。一个人为的代码示例
HELLO MAIN
I AM IN PARA1
I AM IN PARA2
[…]
通过100-DO-IT-EXIT执行100-DO-IT
[...]
戈巴克。
100-DO-IT。
如果A
显然,If语句很简单,可以通过将If移到100-EDIT之外的Perform来避免GO-TO。当控制逻辑很复杂时,程序员必须问自己,这个控制逻辑应该在代码中推到多高或多低
这种特殊的编码风格有其支持者;我不是他们中的一员。COBOL中的转到
与C中的转到
相同
在您的示例中,“转到”将按顺序处理所有指令,直到程序结束
如果希望它只执行PARA1,可以使用performpara1
语句。
如果有更多的段落需要执行,但直到程序结束,您可以使用PERFORM-THRU
构造。通过使用perform,程序将在执行段落后返回
另外,请记住,在许多地方(公司环境)不允许您使用转到
,因为这会产生大量难以理解的代码。此外,无限循环的可能性是相当大的 转到将控件转移到标记的段落,控件不会返回。
因此,您的输出将是:
[...]
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.
事实上,它“继续从那里”正是为什么它是一个危险的指示,以避免尽可能多。不要说它会把你的代码变成意大利面条,这对机器来说很有效,但对人类来说却很难理解。这对“和一样”很好,而且它不仅适用于C语言。事实上,它也适用于几种语言。我提到了C,因为它是MyCopine中最为人所知的。对某人给你的卑鄙的反对票表示慰藉。对于将要遇到的使用示例来说,这很好(有很多方法不使用它,但人们仍然使用)。对某人给你的卑鄙的反对票表示慰藉。GO to的拼写与COBOL中的拼写不同。“你觉得你的答案在已经存在的问题上增加了什么?”BillWoodger我刚刚补充了我对答案的看法。有人无缘无故对这个问题的答案投了反对票。如果他们能停下来,改变他们的投票,那将是非常好的。(我35岁,当我开始编程时,每个人都做了一些基本的工作,所以当我看到GOTO
时,我本能地知道它应该做什么。有趣的是,现在上网的人从来没有见过跳转指令,默认的假设是它应该像一个子程序一样工作。我对未来抱有希望!)