2012-06-12 51 views
6

Tôi đã một biểu hiện của hình thức trình bày dưới đây: -ternary nhà điều hành và trình tự các điểm trong C

while (count) 
{ 
... 
... 

    index = ((count == 20)? 0 : index++); 
... 
... 
} 

Bây giờ các nhà khai thác ternary là điểm chuỗi trong C nhưng tôi tin rằng điểm chuỗi kết thúc ở phần thử nghiệm.

Sự hiểu biết này có chính xác không và như vậy tuyên bố này có dẫn đến hành vi không xác định không?

+1

Tôi nghĩ rằng bạn có nghĩa là các điểm chuỗi .. – SuperSaiyan

+0

Tệ của tôi. sửa chữa nó ngay bây giờ. – Zshn

+1

Tại sao bạn thậm chí còn viết mã đó thay vì: 'index = (count == 20)? 0: index + 1; ' –

Trả lời

11

Phải. Có một điểm chuỗi sau khi đánh giá điều kiện, nhưng điểm thứ tự tiếp theo là dấu chấm phẩy chấm dứt câu lệnh. Vì vậy, bất cứ khi nào count != 20, bạn có hành vi undefined

index = index++; 

từ index được sửa đổi hai lần mà không cần can thiệp điểm chuỗi.

+5

Và ngược lại: 'index = (index ++ == 20)? 0: một cái gì đó, 'là hành vi được xác định rõ ràng (mặc dù thực hành lập trình kém). – Lundin

Các vấn đề liên quan