Ecco una versione ridotta di un codice che causa sia un errore di controllo Range che un errore di overflow, dovrei attivare queste direttive di controllo del compilatore. Capisco perché questo causerebbe un overflow, sulla moltiplicazione di C1, sembra probabile che potrebbe superare il valore massimo del tipo di dati. Ma perché questo dovrebbe anche innescare un errore di verifica del range? La documentazione di Delphi e altri post sullo stack overflow fanno sembrare che gli errori di controllo del range siano di solito per gli accessi di array fuori limite. Ma non sto accedendo a un array sulla linea che sta causando l'errore di controllo dell'intervallo. Forse è sul compito di param1? Ma perché dovrebbe essere un controllo di intervallo e non un errore di overflow, se è così?Causa dell'errore di controllo intervallo (Delphi)
const
C1 = 44001;
C2 = 17999;
function fxnName(..other params...; param1: Word): String;
var
someByte: byte;
begin
// some code
// by now we're in a loop. the following line is where it breaks to in the debugger:
param1 := (someByte + param1) * C1 + C2;
// more code
end;
Se è rilevante, quando si rompe su quella linea nel debugger, tutti i valori appaiono come previsto, tranne param1, che mostra "identificatore non dichiarato: 'param1'" quando chiedo Delphi per valutarla.
avevo il sospetto è solo perché il controllo di gamma si verifica prima che il controllo di overflow, e una volta che la gamma l'eccezione di controllo viene sollevata e il controllo di overflow non avviene mai. (Non sono sicuro dell'ordine, quindi è solo un sospetto.) –