xem xét:Tại sao "i: = i + 1" không cung cấp lỗi kiểm tra phạm vi cho Số nguyên và loại lớn hơn?
{$R+}
i:= 1;
While i > 0 do
i:= i + 1;
ShowMessage(IntToStr(i));
Nếu Tôi tuyên bố i
như Byte, Word, Shortint hoặc tinyint tôi nhận được một lỗi phạm vi kiểm tra, như mong đợi. Nếu tôi khai báo i
là LongWord, Cardinal, Integer, LongInt hoặc Int64, nó chỉ đi qua vòng lặp while và hiển thị giá trị âm hoặc 0, mà i
nhận được khi bạn vượt qua giới hạn trên.
Có phải Delphi 7 không hỗ trợ kiểm tra phạm vi cho số 32 bit và 64 bit không?
Cám ơn lời giải thích của bạn mà giúp với một số hướng. Tôi đã làm một số thử nghiệm nhiều hơn, thay vì thêm i + 1 tôi đã thêm i + j với cả i và j cùng loại. Điều này dẫn đến cùng một vấn đề. Vì vậy, tôi muốn nói toán tử "+" làm cho kết quả là một số nguyên. Điều lạ lùng: nếu tôi sử dụng Inc (i), thì dù tôi sử dụng loại nào, tôi cũng không gặp lỗi rangecheck. Tôi tìm thấy {$ Q +} để cho tôi một ngoại lệ tràn số nguyên. –
Xin lỗi, có, đó phải là một Q, không phải là O :) – JamesT
Vì vậy, cuối cùng tôi đã sử dụng công cụ sai cho công việc và nên đã được tìm kiếm một tràn thay vì một rangecheck. –