Come faccio a disattivare temporaneamente il “valore di ritorno potrebbe essere indefinito” avvertimento?
-
25-09-2019 - |
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
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.