How can I temporarily disable the “return value might be undefined” warning?

后端 未结 3 1249
無奈伤痛
無奈伤痛 2021-02-20 01:25

I want to disable a specific warning (W1035) in my code, since I think that the compiler is wrong about this warning:

function TfrmNagScreen.Run: TOption;
begin
         


        
相关标签:
3条回答
  • 2021-02-20 01:42

    I don't have a Delphi compiler available at the moment, but rearranging the code to remove the if..else might make the warning go away:

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

    See also How to disable a warning in Delphi about “return value … might be undefined”?.

    0 讨论(0)
  • 2021-02-20 01:58

    You can use a neat trick to fool the compiler. Define a library function as so:

    procedure Abort(var X);
    begin
      SysUtils.Abort;
    end;
    

    You can then write your function as:

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

    The compiler thinks you've written to Result since it's a var parameter and it stops bleating.

    0 讨论(0)
  • 2021-02-20 02:06

    you can't disable this warning globally, but you can use the {$WARN NO_RETVAL OFF} to disable locally the warning.

    {$WARN NO_RETVAL OFF}
    function TfrmNagScreen.Run: TOption;
    begin
      if ShowModal = mrOk then
        Result := TOption(rdgAction.EditValue)
      else
        Abort
    end;
    {$WARN NO_RETVAL ON}
    
    0 讨论(0)
提交回复
热议问题