如何在Delphi中禁用有关“返回值...可能未定义“?

How to disable a warning in Delphi about "return value ... might be undefined"?

提问人:Lasse V. Karlsen 提问时间:9/14/2008 最后编辑:Lasse V. Karlsen 更新时间:12/31/2015 访问量:6214

问:

我有一个函数,它给了我以下警告:

[DCC 警告] filename.pas(6939): W1035 函数“function”的返回值可能未定义

但是,该函数干净、小,并且确实具有已知的预期返回值。函数中的第一个语句是:

Result := '';

并且也没有调用局部变量或参数。Result

是否有任何类似编译指示的指令可以围绕此方法来删除此警告?这是德尔菲 2007。

不幸的是,此Delphi安装上的帮助系统无法正常工作,因此我现在无法弹出该警告的帮助。

有人知道他们能做什么吗?

德尔福 警告 指令

评论

0赞 Lasse V. Karlsen 11/20/2014
@NGLN 在链接的副本中,代码没有明确设置,在这种情况下,编译器警告可能是因为编译器看不到,这将终止该方法,而不允许它正确返回。然而,在我的问题中,代码肯定是设置的,因为它实际上是该方法的第一个语句。你确定这是一个好的复制品吗?ResultAbortResult
0赞 NGLN 11/20/2014
哦,射击,我挥舞着欺骗锤;那不是我的本意。我现在可以看到区别,但我认为标题应该是这样的:为什么这个返回值未定义(以及如何解决)?。但如果不是重复的,我仍然不确定这个问题是否应该关闭,因为它听起来太本地化了。我将投票重新开放,因为在发布此答案时,任何一个都没有被标记为欺骗,并将其留给社区决定。

答:

1赞 Espo 9/14/2008 #1

Delphi 中似乎存在某种错误。阅读这篇文章,最后一条评论链接到其他错误报告,这些错误报告可能是你得到的:

http://qc.codegear.com/wc/qcmain.aspx?d=8144

评论

0赞 Lasse V. Karlsen 9/14/2008
我知道,还有一个类似的错误报告,关于太多的局部变量和参数组合导致这种情况,但这个函数真的很简单。无论如何,德尔福是有问题的。还有什么新:)
8赞 Lars Truijens 9/14/2008 #2

您确定已尽一切努力解决警告吗?也许您可以发布代码供我们查看?

您可以通过以下方式在本地关闭警告:

{$WARN NO_RETVAL OFF}
function func(...): string;
begin
  ...
end;
{$WARN NO_RETVAL ON}

评论

0赞 Lasse V. Karlsen 9/14/2008
函数中的第一条语句是为函数提供默认返回值。函数的其余部分是一个 case 语句和从 case 点对其他函数的一些调用。
1赞 Jim McKeeth 9/15/2008 #3

{$WARN NO_RETVAL OFF} 是你要找的,但总的来说,我喜欢找出为什么会发生这样的事情。您可以考虑以不同的方式设置格式,看看是否有帮助。

你那里有任何改变流程的命令,比如退出?您是否直接提出异常等?您的案例语句末尾是否有 else 在 Result 上设置值?

可以尝试调整这些元素,看看这是否也消除了警告。

1赞 Nick Hodges 9/16/2008 #4

为了得到一个好的答案,你必须发布代码。通常,如果存在可能导致 Result 未定义 Result 的可能代码路径,Delphi 编译器将发出此警告。有时,该代码路径并不明显。

评论

1赞 Deltics 11/12/2009
当代码路径遵循显式初始化“结果”的初始无条件代码行时(如问题中所述),那么无论该代码路径多么不明显,警告都是虚假的(在本例中)。
0赞 Ville Krumlinde 5/26/2010
我同意我们需要查看代码来提供帮助。根据我的经验,当返回类型为字符串时,Delphi 从不警告丢失返回值。即使未设置结果。
4赞 Lars Fosdal 9/16/2008 #5

我不确定我是否要查看此单元的代码...毕竟,错误发生在第 6939 行......也许超出了某些内部编译器表?

评论

1赞 WileCau 11/17/2010
我同意。我已经在 D2006 中看到了这个警告,该方法包含带有嵌套分支的大型 case 语句。删除某些代码路径会使警告消失,无论删除了哪些分支。因此,在编译器停止查找并假设必须至少有一个路径未设置结果之前,可能发生的分支量似乎是有限的:)
1赞 Abelevich 5/26/2010 #6

Delphi 编译器中存在这样的错误,至少从 Delphi4 开始:如果函数参数(包括 Self 和 Result)和局部变量的数量之和超过 31,则会导致问题。例如,它可以写入 W1035 警告(结果可能未定义)。它可能会遗漏未使用的变量。试试这个项目:

program TestCompilerProblems;

procedure Proc;
var
  a01, a02, a03, a04, a05, a06, a07, a08, a09, a10,
  a11, a12, a13, a14, a15, a16, a17, a18, a19, a20,
  a21, a22, a23, a24, a25, a26, a27, a28, a29, a30,
  a31, a32, a33, a34, a35, a36, a37, a38, a39, a40: Integer;
begin
end;

begin
  Proc;
end.

这将导致 31 个提示,而不是 40 个。