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

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

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

Result := '';

并且没有名为的局部变量或参数 Result 任何一个。

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

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

有人知道我能做什么吗?

有帮助吗?

解决方案

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

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

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

其他提示

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

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

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

{$WARN NO_RETVAL OFF} 是您正在寻找的内容,但通常我喜欢找出为什么会发生这样的事情。您可以考虑以不同的方式格式化它,看看是否有帮助。

你那里有像退出这样的流程改变命令吗?您是否直接提出异常等?您的 case 语句末尾是否有一个 else 来设置 Result 的值?

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

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

至少从Delphi4开始,Delphi编译器就存在这样一个bug:如果函数的参数(包括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 条。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top