Come disabilitare un avviso in Delphi relativo al "valore restituito... potrebbe essere indefinito"?

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

  •  09-06-2019
  •  | 
  •  

Domanda

Ho una funzione che mi dà il seguente avviso:

[Avviso DCC] nomefile.pas(6939):W1035 Il valore restituito della funzione 'funzione' potrebbe non essere definito

La funzione, tuttavia, è pulita, piccola e ha un valore restituito noto e atteso.La prima istruzione nella funzione è:

Result := '';

e non viene richiamata alcuna variabile o parametro locale Result O.

Esiste qualche tipo di direttiva simile a un pragma con cui posso circondare questo metodo per rimuovere questo avviso?Questo è Delphi 2007.

Sfortunatamente, il sistema di aiuto su questa installazione di Delphi non funziona, quindi non posso visualizzare l'aiuto per quell'avviso in questo momento.

Qualcuno sa a priori cosa posso fare?

È stato utile?

Soluzione

Sei sicuro di aver fatto tutto per risolvere l'avviso?Forse potresti postare il codice affinché lo guardiamo?

Puoi disattivare l'avviso localmente in questo modo:

{$WARN NO_RETVAL OFF}
function func(...): string;
begin
  ...
end;
{$WARN NO_RETVAL ON}

Altri suggerimenti

Non sono sicuro di voler vedere il codice di questa unità...dopo tutto, l'errore si verifica alla riga 6939...Forse sono state superate alcune tabelle interne del compilatore?

Sembra che ci sia una sorta di bug in Delphi.Leggi questo post, l'ultimo commento si collega ad altre segnalazioni di bug che potrebbero essere quelle che hai ricevuto:

http://qc.codegear.com/wc/qcmain.aspx?d=8144

Il {$WARN NO_RETVAL OFF} è quello che stai cercando, ma generalmente mi piace scoprire perché accadono cose del genere.Potresti considerare di formattarlo diversamente e vedere se questo aiuta.

Hai qualche comando che altera il flusso come Esci lì dentro?Sollevi direttamente eccezioni, ecc.?La tua istruzione case ha un else alla fine che imposta un valore su Result?

Potresti provare a modificare questi elementi e vedere se questo elimina anche l'avviso.

Per ottenere una buona risposta a questo, dovrai pubblicare il codice.In generale, il compilatore Delphi fornirà questo avviso se esiste un possibile percorso del codice che potrebbe comportare la mancata definizione del risultato.A volte il percorso del codice è meno che ovvio.

C'è un bug del genere nel compilatore Delphi almeno a partire da Delphi4:se la somma dei numeri dei parametri della funzione (inclusi Self e Result) e delle variabili locali supera 31, causa problemi.Ad esempio, può scrivere avvisi W1035 (il risultato potrebbe essere indefinito).Possono mancare variabili non utilizzate.Prova questo progetto:

program TestCompilerProblems;

procedure Proc;
var
  a01, a02, a03, a04, a05, a06, a07, a08, a09, a10,
  a11, a12, a13, a14, a15, a16, a17, a18, a19, a20,
  a21, a22, a23, a24, a25, a26, a27, a28, a29, a30,
  a31, a32, a33, a34, a35, a36, a37, a38, a39, a40: Integer;
begin
end;

begin
  Proc;
end.

Causerebbe 31 suggerimenti, non 40.

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