提问人:Lasse V. Karlsen 提问时间:9/14/2008 最后编辑:Lasse V. Karlsen 更新时间:12/31/2015 访问量:6214
如何在Delphi中禁用有关“返回值...可能未定义“?
How to disable a warning in Delphi about "return value ... might be undefined"?
问:
我有一个函数,它给了我以下警告:
[DCC 警告] filename.pas(6939): W1035 函数“function”的返回值可能未定义
但是,该函数干净、小,并且确实具有已知的预期返回值。函数中的第一个语句是:
Result := '';
并且也没有调用局部变量或参数。Result
是否有任何类似编译指示的指令可以围绕此方法来删除此警告?这是德尔菲 2007。
不幸的是,此Delphi安装上的帮助系统无法正常工作,因此我现在无法弹出该警告的帮助。
有人知道他们能做什么吗?
答:
Delphi 中似乎存在某种错误。阅读这篇文章,最后一条评论链接到其他错误报告,这些错误报告可能是你得到的:
http://qc.codegear.com/wc/qcmain.aspx?d=8144
评论
您确定已尽一切努力解决警告吗?也许您可以发布代码供我们查看?
您可以通过以下方式在本地关闭警告:
{$WARN NO_RETVAL OFF}
function func(...): string;
begin
...
end;
{$WARN NO_RETVAL ON}
评论
{$WARN NO_RETVAL OFF} 是你要找的,但总的来说,我喜欢找出为什么会发生这样的事情。您可以考虑以不同的方式设置格式,看看是否有帮助。
你那里有任何改变流程的命令,比如退出?您是否直接提出异常等?您的案例语句末尾是否有 else 在 Result 上设置值?
可以尝试调整这些元素,看看这是否也消除了警告。
为了得到一个好的答案,你必须发布代码。通常,如果存在可能导致 Result 未定义 Result 的可能代码路径,Delphi 编译器将发出此警告。有时,该代码路径并不明显。
评论
我不确定我是否要查看此单元的代码...毕竟,错误发生在第 6939 行......也许超出了某些内部编译器表?
评论
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 个。
评论
Result
Abort
Result