如何在Delphi中禁用有关“返回值…可能未定义”的警告?

如何在Delphi中禁用有关“返回值…可能未定义”的警告?

How to disable a warning in Delphi about “return value … might be undefined”?

我有一个函数,向我发出以下警告:

[DCC Warning] filename.pas(6939): W1035 Return value of function 'function' might be undefined

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

1
Result := '';

并且也没有称为Result的局部变量或参数。

我可以使用某种类似于杂用指令的指令来消除此警告吗? 这是Delphi 2007。

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

有人知道我该怎么办吗?


您确定您已采取一切措施解决警告吗?也许您可以将代码发布给我们看看?

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

1
2
3
4
5
6
{$WARN NO_RETVAL OFF}
function func(...): string;
begin
  ...
end;
{$WARN NO_RETVAL ON}

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


Delphi编译器中至少存在这样的错误,至少是因为Delphi4:如果函数参数(包括Self和Result)和局部变量的数量之和超过31,则会引起问题。例如,它可以编写W1035警告(结果可能是不确定的)。它会错过未使用的变量。只需尝试以下项目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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。


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


{$ WARN NO_RETVAL OFF}是您要寻找的东西,但是总的来说,我想找出为什么会发生这种情况。您可以考虑采用不同的格式,看看是否有帮助。

您那里是否有任何流程更改命令,例如"退出"?您是否直接提出例外等?您的case语句的末尾是否有else来设置Result的值?

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


Delphi中似乎存在某种错误。阅读这篇文章,最后的评论链接到您可能已经获得的其他错误报告:

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


推荐阅读