Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 我如何临时禁用;返回值可能未定义";警告_Delphi_Delphi 2007_Suppress Warnings_Compiler Directives - Fatal编程技术网

Delphi 我如何临时禁用;返回值可能未定义";警告

Delphi 我如何临时禁用;返回值可能未定义";警告,delphi,delphi-2007,suppress-warnings,compiler-directives,Delphi,Delphi 2007,Suppress Warnings,Compiler Directives,我想在我的代码中禁用一个特定的警告(W1035),因为我认为编译器对此警告是错误的: function TfrmNagScreen.Run: TOption; begin if ShowModal = mrOk then Result := TOption(rdgAction.EditValue) else Abort end; 由于Abort抛出EAbort,因此无法不定义结果 我试过: {$WARN 1035 Off}:显然这只适用于某些特定错误(请参阅) {$W

我想在我的代码中禁用一个特定的警告(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}
,但这不是本文的目的


编辑:我现在已对此进行了质量控制。

我目前没有可用的Delphi编译器,但重新排列代码以删除
if..else
可能会使警告消失:

function TfrmNagScreen.Run: TOption;
begin
  if ShowModal <> mrOk then
    Abort;

  Result := TOption(rdgAction.EditValue);
end;
函数TfrmNagScreen.Run:TOption;
开始
如果没有问题,那么
中止
结果:=Topion(rdgAction.EditValue);
结束;

另请参见。

您不能全局禁用此警告,但可以使用
{$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}

你可以用巧妙的方法愚弄编译器。将库函数定义为:

procedure Abort(var X);
begin
  SysUtils.Abort;
end;
然后,您可以将函数编写为:

if ShowModal = mrOk then
  Result := TOption(rdgAction.EditValue)
else
  Abort(Result)

编译器认为您编写的是Result,因为它是一个var参数,并且停止了咩咩叫。

+1有效(针对特定情况),我没有想到这一点,但它并不能解决一般问题。您从哪里获得
NO_RETVAL
,因为它不在Embarcadero文档中?@Jens,请参阅Ok,所以大多数(所有?)警告文本都在
DCCStrs.pas
中定义,请注意:)编辑单元时按Ctrl-O-O,然后查看编辑器窗口顶部。:-)虽然编译器有时会感到困惑,并无缘无故地报告此警告,但在这种情况下,编译器在技术上是正确的。结果不在条件之前赋值,只在条件的真分支上赋值。如果条件为false,函数过早返回的事实与编译器无关。@codelgance:非常正确,但我认为
Abort
是一个内置函数,编译器可以识别这种情况。