EDIT: điều này là không chính xác, tuy nhiên tôi để nó ở đây vì các cuộc thảo luận sau trong các ý kiến là phần nào chiếu sáng, và tôi hy vọng có giá trị.
Nó được xác định rõ dựa trên thứ tự đánh giá của các toán tử trong C (hoặc C++).
Đánh giá lực lượng bài tập về phía bên tay phải của biểu thức trước tiên. Ứng dụng chức năng lực lượng đánh giá các đối số của nó đầu tiên, do đó, hiệu quả có vẻ hợp lý rõ ràng (mặc dù tôi đã không cố gắng chạy nó, vì vậy cảm thấy tự do để sửa tôi!). Chúng ta có thể viết lại này sử dụng các biến tạm thời (Tôi sẽ gọi cho họ t0 và t1), và tôi tin rằng đây có thể là rõ ràng hơn một chút:
t0 = y++;
t1 = f(t0);
*y = t1;
Thuật ngữ "chuỗi điểm" là một chút của một cá trích đỏ. Một điểm chuỗi không thực sự được tạo ra, thay vì nó chỉ là hậu quả của việc có một thứ tự đánh giá nghiêm ngặt được định nghĩa cho ngôn ngữ.
EDIT: Trong khi câu trả lời này có vẻ thỏa mãn về mặt trí tuệ, câu trả lời của James McNellis trích dẫn phần có liên quan của thông số C99 nêu rõ rằng thứ tự đánh giá của bài tập là không phải là được xác định rõ. Đầy đủ tín dụng cho anh ta để thực sự kiểm tra sự thật của mình. Tôi sẽ sửa lại câu trả lời của tôi từ "nó được định nghĩa" thành "nó có thể được xác định rõ ràng đối với một trình biên dịch cụ thể", vì tôi nghĩ rằng hầu hết các trình biên dịch sẽ thường xuyên thay đổi thứ tự mà chúng phát ra mã đó (Tôi nói "có thể" để giải thích cho bất kỳ tối ưu hóa rất tích cực nào).
Tôi nói không. Đó là những gì 'gcc' nói với tôi. – kennytm