如何暂时禁用“返回值可能是未定义的”警告?
-
25-09-2019 - |
题
我想在我的代码中禁用特定的警告(W1035),因为我认为编译器对此警告是错误的:
function TfrmNagScreen.Run: TOption;
begin
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort
end;
由于无法确定结果,因为 Abort
扔 EAbort
.
我试过了:
{$WARN 1035 Off}
: :显然,这仅适用于某些特定错误(请参阅 文档){$W-1035}
: :根本什么都不做
我知道我可以在项目选项中关闭全球警告,或使用 {$WARNINGS OFF}
, ,但这不是这里的意图。
编辑:我现在已经有QC #89744.
解决方案
您不能在全球范围内禁用此警告,但是您可以使用 {$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}
其他提示
目前我没有Delphi编译器,但是重新安排代码以删除 if..else
可能会使警告消失:
function TfrmNagScreen.Run: TOption;
begin
if ShowModal <> mrOk then
Abort;
Result := TOption(rdgAction.EditValue);
end;
也可以看看 如何禁用Delphi警告“退货价值……可能是不确定的”?.
您可以使用整洁的技巧来欺骗编译器。将库函数定义为:
procedure Abort(var X);
begin
SysUtils.Abort;
end;
然后,您可以将您的函数写为:
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort(Result)
编译器认为您已经写成结果,因为它是一个VAR参数,并且停止了打击。
不隶属于 StackOverflow