Rozważmy:Dlaczego "i: = i + 1" nie daje błędu sprawdzania zakresu dla liczb całkowitych i większych typów?
{$R+}
i:= 1;
While i > 0 do
i:= i + 1;
ShowMessage(IntToStr(i));
Jeśli oświadczam i
jako Byte, Word, Shortint lub TINYINT pojawia się błąd zakres sprawdzić, jak oczekiwano. Jeśli zadeklaruję i
jako LongWord, Cardinal, Integer, LongInt lub Int64, po prostu przejdzie przez pętlę while i wyświetli wartość ujemną lub 0, którą uzyskuje i
po przekroczeniu górnej granicy.
Czy Delphi 7 nie obsługuje sprawdzania zakresu pod kątem liczb 32-bitowych i 64-bitowych?
Dzięki za wyjaśnienie co pomogło z jakimś kierunku. Zrobiłem więcej testów, zamiast dodawać i + 1 dodałem i + j zarówno z i i j tego samego typu. To spowodowało ten sam problem. Powiedziałbym więc, że operator "+" sprawia, że wynik jest liczbą całkowitą. Co dziwne: jeśli używam Inc (i), to bez względu na to, jakiego typu używam, nie otrzymuję błędu rangecheck. Znalazłem {$ Q +}, aby dać mi wyjątek przepełnienia liczby całkowitej. –
Przepraszam, tak, to powinno być Q, a nie O :) – JamesT
Więc w końcu użyłem niewłaściwego narzędzia do pracy i powinienem był szukać przelewu zamiast rangecheck. –