Pergunta

Quero desativar um aviso específico (W1035) no meu código, já que acho que o compilador está errado sobre esse aviso:

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

Não há como o resultado ser indefinido, pois Abort joga EAbort.

Eu tentei:

  • {$WARN 1035 Off}: Aparentemente, isso funciona apenas para alguns erros específicos (ver Documentação)
  • {$W-1035}: Nada faz nada

Eu sei que posso desligar o aviso globalmente nas opções do projeto, ou usando {$WARNINGS OFF}, mas não é isso que se destina aqui.

Edit: eu já fiz isso agora como #89744.

Foi útil?

Solução

Você não pode desativar esse aviso globalmente, mas pode usar o {$WARN NO_RETVAL OFF} Para desativar localmente o aviso.

{$WARN NO_RETVAL OFF}
function TfrmNagScreen.Run: TOption;
begin
  if ShowModal = mrOk then
    Result := TOption(rdgAction.EditValue)
  else
    Abort
end;
{$WARN NO_RETVAL ON}

Outras dicas

Não tenho um compilador Delphi disponível no momento, mas reorganizando o código para remover o if..else Pode fazer o aviso desaparecer:

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

  Result := TOption(rdgAction.EditValue);
end;

Veja também Como desativar um aviso em Delphi sobre "Valor de retorno ... pode ser indefinido"?.

Você pode usar um truque interessante para enganar o compilador. Defina uma função da biblioteca:

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

Você pode escrever sua função como:

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

O compilador pensa que você escreveu para resultar, pois é um parâmetro VAR e para de balanço.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top