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

时间:2008-09-14 15:40:38

标签: delphi warnings directive

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

  

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

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

Result := '';

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

是否有任何类似pragma的指令我可以使用此方法来删除此警告?这是Delphi 2007。

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

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

6 个答案:

答案 0 :(得分:6)

你确定你已经做了一切来解决警告吗?也许你可以发布代码供我们查看?

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

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

答案 1 :(得分:3)

我不确定我是否希望看到此单元的代码...毕竟,错误发生在第6939行...可能已经超出了某些内部编译器表?

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

{$ WARN NO_RETVAL OFF}正是您所寻找的,但通常我想知道为什么这样的事情会发生。您可以考虑以不同方式对其进行格式化,看看是否有帮

你有任何流量改变命令,比如Exit吗?你直接提出例外等吗?你的case语句最后是否在Result上设置了一个值?

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

答案 4 :(得分:1)

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

答案 5 :(得分: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点。