我想在我的代码中禁用特定的警告(W1035),因为我认为编译器对此警告是错误的:

function TfrmNagScreen.Run: TOption;
begin
  if ShowModal = mrOk then
    Result := TOption(rdgAction.EditValue)
  else
    Abort
end;

由于无法确定结果,因为 AbortEAbort.

我试过了:

  • {$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参数,并且停止了打击。

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