Come faccio a disattivare temporaneamente il “valore di ritorno potrebbe essere indefinito” avvertimento?

StackOverflow https://stackoverflow.com/questions/4204326

Domanda

Voglio disabilitare uno specifico avviso (W1035) nel mio codice, in quanto credo che il compilatore è sbagliato su questo avvertimento:

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

Non c'è alcun modo il risultato potrebbe essere indefinito, in quanto getta Abort EAbort.

ho provato:

  • {$WARN 1035 Off}: Pare che questo funziona solo per alcuni errori specifici (vedi Documentazione )
  • {$W-1035}: non fa nulla a tutti

So di poter spegnere l'allarme a livello globale nelle opzioni di progetto, o utilizzando {$WARNINGS OFF}, ma non è questo ciò che si intende qui.

Modifica:. Ho QC'ed questo ora come # 89.744

È stato utile?

Soluzione

Non è possibile disabilitare questo avviso a livello globale, ma è possibile utilizzare la {$WARN NO_RETVAL OFF} per disabilitare localmente l'avvertimento.

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

Altri suggerimenti

Non ho un compilatore Delphi disponibile al momento, ma riorganizzare il codice per rimuovere il if..else potrebbe rendere l'avvertimento andare via:

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

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

Come disattivare un avviso in Delphi di “valore di ritorno ... potrebbe essere indefinito”? .

È possibile utilizzare un trucco per ingannare compilatore. Definire una funzione di libreria come:

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

È possibile quindi scrivere la funzione di:

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

Il compilatore pensa che hai scritto al risultato dal momento che è un parametro var e si ferma a belare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top