8

我有一个功能给我以下警告:

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

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

Result := '';

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

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

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

任何人都知道我能做什么?

4

6 回答 6

7

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

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

{$WARN NO_RETVAL OFF}
function func(...): string;
begin
  ...
end;
{$WARN NO_RETVAL ON}
于 2008-09-14T15:49:57.837 回答
3

我不确定我是否想查看这个单元的代码……毕竟,错误发生在第 6939 行……可能超出了某些内部编译器表?

于 2008-09-16T06:21:32.477 回答
1

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

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

于 2008-09-14T15:49:19.147 回答
1

{$WARN NO_RETVAL OFF} 是您要查找的内容,但通常我喜欢找出发生这种情况的原因。您可能会考虑以不同的方式对其进行格式化,看看是否有帮助。

你有没有像 Exit 这样的流量改变命令?您是否直接引发异常等?您的 case 语句最后是否有一个 else 来设置 Result 的值?

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

于 2008-09-15T03:00:39.470 回答
1

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

于 2008-09-15T21:08:14.910 回答
1

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 个。

于 2010-05-25T16:45:57.330 回答