我想在我的代码中禁用特定警告(W1035),因为我认为编译器对此警告是错误的:
function TfrmNagScreen.Run: TOption;
begin
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort
end;
由于Abort
抛出EAbort
,因此无法定义结果。
我试过了:
{$WARN 1035 Off}
:显然这仅适用于某些特定错误(请参阅Documentation){$W-1035}
:什么都不做我知道我可以在项目选项中全局关闭警告,或使用{$WARNINGS OFF}
,但这不是此处的目的。
编辑:我现在已将此问题调整为#89744。
答案 0 :(得分:13)
您无法全局禁用此警告,但您可以使用{$WARN NO_RETVAL OFF}
在本地禁用警告。
{$WARN NO_RETVAL OFF}
function TfrmNagScreen.Run: TOption;
begin
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort
end;
{$WARN NO_RETVAL ON}
答案 1 :(得分:9)
我目前没有可用的Delphi编译器,但重新排列代码以删除if..else
可能会使警告消失:
function TfrmNagScreen.Run: TOption;
begin
if ShowModal <> mrOk then
Abort;
Result := TOption(rdgAction.EditValue);
end;
另见How to disable a warning in Delphi about “return value … might be undefined”?。
答案 2 :(得分:1)
您可以使用巧妙的技巧来欺骗编译器。如下定义库函数:
procedure Abort(var X);
begin
SysUtils.Abort;
end;
然后您可以将您的功能编写为:
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort(Result)
编译器认为你已写入Result,因为它是一个var参数,它会停止咩咩声。