considerar:¿Por qué "i: = i + 1" no da un error de verificación de rango para enteros y tipos más grandes?
{$R+}
i:= 1;
While i > 0 do
i:= i + 1;
ShowMessage(IntToStr(i));
Si Declaro i
como byte, palabra o Shortint TinyInt me sale un error de rango-cheque, como se esperaba. Si declaro i
como LongWord, Cardinal, Integer, LongInt o Int64 solo pasa por el ciclo while y muestra el valor negativo o 0, que i
obtiene al pasar el límite superior.
¿Delphi 7 no es compatible con la comprobación de rango para números de 32 y 64 bits?
Gracias por su explicación que ayudó con alguna dirección. Hice algunas pruebas más, en lugar de agregar i + 1, agregué i + j con i yj del mismo tipo. Esto resultó en el mismo problema. Entonces, yo diría que el operador "+" hace que el resultado sea un número entero. Aunque parezca extraño: si utilizo Inc (i), no importa qué tipo use, no obtengo un error de comprobación de rango. Encontré el {$ Q +} para darme una excepción de desbordamiento de enteros. –
Lo siento, sí, debería haber sido una Q, no una O :) – JamesT
Así que al final estaba usando la herramienta incorrecta para el trabajo y debería haber estado buscando un desbordamiento en lugar de una verificación de rango. –