Câu trả lời khác đã chỉ ra các khía cạnh của <<
là hành vi không xác định. Tôi đoán là bạn muốn có một "bản dịch" của gcc sang ngôn ngữ chung.
Nếu một hành vi không được xác định bởi tiêu chuẩn C, người triển khai trình biên dịch có thể lấy "vĩ độ" để làm bất cứ điều gì phù hợp với họ nếu trường hợp như vậy xảy ra. Đặc biệt, họ không phải thực hiện một chẩn đoán hoặc phát hiện trường hợp đó, và có thể giả vờ rằng nó không bao giờ xảy ra. Đó là trách nhiệm của lập trình viên để viết chương trình của mình sao cho hành vi của nó luôn được xác định.
Trong trường hợp dịch trái, điều này có nghĩa là một trình biên dịch sẽ không phải kiểm tra tràn và có thể giả vờ rằng một vòng lặp như
for (int i = 1; i > 0; i <<= a) {
.... change a in some complicated way ...
}
sẽ không bao giờ chấm dứt.
Câu mà bạn đang trích dẫn cho biết rằng họ không làm một điều như vậy, tuy nhiên, nhưng các phiên bản gcc trong tương lai có thể làm như vậy.
Nguồn
2013-08-24 08:47:10
Câu hỏi hay! Câu đó sẽ đạt được giải nhất cho fogginess! Tôi không phải là người nói tiếng Anh bản địa, vì vậy tôi không thể chắc chắn 100%, nhưng kỹ năng tiếng Anh của tôi khá tiên tiến và tôi vẫn còn bối rối bởi từ "chỉ". Tôi không thể quyết định những thuật ngữ khác nó đề cập đến. * Chỉ * C99 sử dụng vĩ độ? * Chỉ * một số khía cạnh nhất định được xử lý bằng vĩ độ. GCC không sử dụng vĩ độ * chỉ * cho ký hiệu '<<'? Điều này dường như là giải thích tốt nhất, nhưng sau đó "những khía cạnh nhất định": nguyên nhân UB có thể chỉ là một cặp vợ chồng, nó sẽ đơn giản hơn nhiều để nói những gì GCC hiện đang làm và cảnh báo về những thay đổi trong tương lai! –