Đã chỉnh sửa để bao gồm tham chiếu chuẩn phù hợp nhờ Carl Norum.Số nguyên tràn trong C: tiêu chuẩn và trình biên dịch
tiêu chuẩn quốcC
Nếu một điều kiện đặc biệt xảy ra trong việc đánh giá một biểu thức (có nghĩa là, nếu kết quả không được về mặt toán học xác định hoặc không nằm trong khoảng giá trị biểu diễn cho loại hình của nó), hành vi không xác định.
Có trình chuyển mạch trình biên dịch đảm bảo các hành vi nhất định trên tràn số nguyên không? Tôi muốn tránh những con quỷ mũi. Đặc biệt, tôi muốn buộc trình biên dịch bao bọc tràn.
Vì mục đích duy nhất, hãy lấy tiêu chuẩn là C99 và trình biên dịch là gcc. Nhưng tôi sẽ quan tâm đến câu trả lời cho các trình biên dịch khác (icc, cl) và các tiêu chuẩn khác (C1x, C89). Trong thực tế, chỉ để làm phiền đám đông C/C++, tôi thậm chí sẽ đánh giá cao câu trả lời cho C++ 0x, C++ 03 và C++ 98.
Lưu ý: Tiêu chuẩn quốc tế ISO/IEC 10967-1 có thể có liên quan ở đây, nhưng theo như tôi có thể nói nó chỉ được đề cập trong phụ lục thông tin.
Tuyệt vời, chỉ là những gì tôi muốn xem. Có điều gì có thể so sánh được với các loại chưa ký không? – Charles
@Charles bạn không cần chúng cho các loại chưa ký - hành vi tràn đã được xác định rõ cho chúng (xem câu trả lời của tôi). –
@Carl Norum: Tôi thấy rằng nó được định nghĩa trong C++, và nó được định nghĩa trong C cho ca (6.5.7 para 5). Tôi không thể nhìn thấy nơi nó được xác định trong tiêu chuẩn C để bổ sung và nhân. – Charles