Como posso desativar temporariamente o aviso "Valor de retorno pode ser indefinido"?
-
25-09-2019 - |
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.
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.