9

我注意到 SysUtils.pas 中定义的 EStackOverflow 在 Delphi 2009 中被标记为已弃用。我检查并在 2007 年也被标记为已弃用。我在这里有一个 Delphi 7 安装磁盘,但我想我会问是否有人知道什么时候它已被弃用。

此外,有谁知道为什么,以及什么取代它?我编写了一个通过递归导致堆栈溢出的测试应用程序,我仍然得到一个 EStackOverflow 异常,但是如果我专门为它添加一个处理程序,那么我得到

[DCC 警告] Unit57.pas(85): W1000 符号 'EStackOverflow' 已弃用

我知道 EStackOverflow 是 EExternal 的后代,我可以捕获 EExternal 并检查 STATUS_STACK_OVERFLOW 的 ExceptionCode,但这似乎没有必要,因为它仍然会引发 EStackOverflow 异常。

这只是为了阻止我在自己的代码中抛出 EStackOverflow 吗?

(是的,我意识到在一个名为StackOverflow的网站上询问有关EStackOverflow的问题具有讽刺意味,是的,我非常认真。)

4

5 回答 5

4

我这里没有 D5 可说,但我几乎不记得弃用指令仅出现在 D6 上。

至于 StackOverflow 异常,我认为它已被弃用,因为它仅适用于 Delphi 运行时环境来引发它。

编辑:根据所有答案的汇总,当引入 Deprecated 关键字时,EStackOverflow 在 Delphi 6 中已被弃用。

于 2008-11-12T16:57:37.843 回答
4

就像在 .NET 中一样,您无法真正捕获 StackOverflow 异常,您会恢复到什么?如果您需要捕获一个,您的代码很可能是错误的:)

于 2008-11-14T20:41:46.073 回答
2

我刚刚检查了我的 Delphi 6,并且 EStackOverflow 已经被弃用了。我在这里无法访问旧版本的 Delphi。

我无法帮助您解释原因或可能的替代品。

于 2008-11-12T10:25:01.643 回答
2

在 Delphi 5 中,它还没有被弃用。

编辑:实际上,在 Delphi 5 中,'deprecated' 不是保留字。

于 2008-11-12T13:54:56.603 回答
1

这只是为了阻止我在自己的代码中抛出 EStackOverflow 吗?

更重要的是,我认为这意味着您不应该将代码设计为依赖于在未来版本中抛出的代码。

于 2008-11-12T12:27:48.713 回答