C11 §6.5.7 Khoản 5:Là "-1 >> 5;" hành vi không xác định trong C?
Kết quả của
E1 >> E2
làE1
vị tríE2
chút phải thay đổi. NếuE1
có loại chưa ký hoặc nếuE1
có loại đã ký và giá trị không âm, , giá trị của kết quả là phần không tách rời của số thương sốE1/2*^E2
. NếuE1
có loại đã ký và giá trị âm, giá trị kết quả được xác định thực hiện.
Nhưng, Tài liệu tham khảo viva64 nói:
int B; B = -1 >> 5; // unspecified behavior
tôi chạy mã này vào GCC và nó luôn luôn đưa ra một sản lượng -1
.
Vì vậy, tiêu chuẩn nói rằng "Nếu E1 có một loại chữ ký và một giá trị âm, giá trị kết quả là thực hiện xác định", Nhưng tài liệu mà nói rằng -1>>5;
là không xác định hành vi.
Vì vậy, là -1>>5;
hành vi không xác định trong C? Đó là chính xác?
Nếu bạn đang cố gắng viết mã di động, sự khác biệt giữa việc triển khai được xác định và không xác định không phải là rất đáng kể, vì vậy các trình kiểm tra mã xử lý chúng tương tự. – Barmar
Nó được thực hiện xác định. – chux
@chux Vì vậy, tài liệu đó không đúng? – rsp