Attenzione all'utilizzo del comando Exit
nelle funzioni inline! Ho usato Delphi XE3 qui.Si tratta di un bug che tenta di compilare questo codice, causando la chiusura di IDE o il mancato avvio del compilatore?
sintomo
In alcuni casi, quando viene effettuata una chiamata ad una funzione inline che contiene Exit
comando e valore il ritorno della funzione linea viene utilizzata direttamente in WriteLn()
, il compilatore segnala un errore messaggio,
"dcc" exited with code 1.
o, peggio ancora, l'IDE Delphi termina senza alcuna conferma.
function ProcessNumber(const iNumber: Integer): Boolean; inline;
begin
if iNumber = 0 then begin
Result := False;
Exit;
end;
// some code here ...
Result := True;
end;
procedure Test;
begin
writeln(ProcessNumber(0));
end;
begin
Test;
ReadLn;
end.
Tuttavia, se il valore restituito della funzione inline è memorizzato in una variabile, e quindi la variabile è utilizzata nel WriteLn()
, il problema non si verifica.
procedure Test;
var
b: Boolean;
begin
b := ProcessNumber(0);
writeln(b);
end;
Domande
- Si tratta di un bug del compilatore?
- Se si tratta di un errore, esiste una soluzione alternativa per uscire in modo sicuro da una funzione in linea?
E mi domando, cosa si aspetta questo per uscire dal contesto del chiamante, o semplicemente la funzione inline? – TLama
@TLama Penso che chi lo sa sappia che 'inline' non cambia cosa significhi' exit'.È l'AV interno che uccide l'IDE che è il problema. –