在delphi中是否有一种情况,GOTO是唯一的解决方案?

Mic*_*l T 2 delphi goto

goto句话是我工作的禁忌.
所以出现以下问题......

是否有可能a goto是唯一有效的解决方案?

Dav*_*nan 6

是否有可能a GOTO是唯一有效的解决方案?

我想这取决于你的意思是有效的.我想你是在询问是否存在一个只能使用该goto语句编写的程序.在这种情况下,答案是没有这样的程序.无论是否有goto声明,德尔福都是图灵完成的.

但是,如果我们准备扩大讨论范围以包括其他语言,那么有些情况下goto是一个很好的解决方案,甚至是最好的解决方案.最常见的情况是在没有结构化异常处理的语言中实现整理和错误处理.如果您仔细阅读Linux源代码,您会发现它goto被广泛使用.我希望Windows源代码也是如此.


Mar*_*ort 5

最初GOTO被添加到Pascal中以进行错误处理,包括Borland(/ Embarcadero)从未实现的过程间形式(例如:从内部过程到父过程的GOTOing),就像Borland从未实现其他内部函数功能一样,例如将内部函数传递给过程-typed参数.(*)

通过这种方式,GOTO可以被视为例外的前兆.

还有一些实际用途:我最后一次检查时,跳过带有goto的嵌套IF语句在Delphi中仍然更快,然后让代码从嵌套中自然退出.像这样的优化有时用于例如压缩代码,以及具有深度嵌套循环或条件语句的其他复杂树处理代码.

这样的例程通常仍然使用goto进行错误处理,因为它更快.(异常不仅缓慢,而且它们的边界条件会抑制某些优化).

人们可以将其视为Object Pascal的普通Pascal级别的一部分,就像C++几乎完全允许普通C一样.

(当然,由于Delphi中的优化压缩代码仅以.o形式提供,因此在Delphi代码库中很难找到示例.JPEG代码有一些,但这是C转换)

(*)原始pascal和IIRC甚至Turbo Pascal不允许过早退出EXIT程序.CONTINUE和BREAK也是如此.