Delphi 我如何临时禁用;返回值可能未定义";警告
我想在我的代码中禁用一个特定的警告(W1035),因为我认为编译器对此警告是错误的: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
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
是一个内置函数,编译器可以识别这种情况。