2012-08-30 14 views
5

Trích dẫn từ tiêu chuẩn C11:Về các nhà điều hành mảng subscripting

Mảng subsripting (§ 6.5.2.1)

Định nghĩa của các nhà điều hành subscript []E1[E2] giống hệt (*((E1)+(E2))).

Tôi muốn biết tại sao khung xung quanh E1 cần thiết (họ đã bị mất tích trong các tiêu chuẩn C89), tức trong đó biểu thức có thể (*(E1+(E2))) thể khác với (*((E1)+(E2)))?

+0

Ý kiến ​​duy nhất của tôi trước đây là E2 được đánh giá trước E1. Cái sau không ưu tiên và dấu ngoặc đơn được lồng nhau bằng nhau. Không biết tại sao. –

+8

Tôi không viết dòng đó, hay bất kỳ dòng nào trong tiêu chuẩn, nhưng GUESS của tôi là "E1" và "E2" có nghĩa là biểu đạt, và họ chỉ muốn nhấn mạnh rằng E1 được đánh giá hoàn toàn ngay cả khi bạn về cơ bản " sao chép và dán "nó vào mô tả. –

+0

Tôi hoàn toàn đồng ý với @ChristianStieber. Trong adition bạn phải nhớ rằng '+' và '[]' có các ưu tiên khác nhau, vì vậy nếu 'E1' là một biểu thức nó có thể liên kết khác với' + 'phía sau. –

Trả lời

9

Theo http://www.open-std.org/jtc1/sc22/wg14/www/docs/n841.htm, nó được chèn chỉ để làm rõ. Hai biểu thức tương đương với cú pháp.

Công Comment Số PC-UK0103
Comment 1.
Thể loại: thay đổi biên tập/đóng góp không quy chuẩn
Ủy ban Dự thảo tiểu mục: 6.3.2.1
Tiêu đề: Array subscripting dụ
Mô tả chi tiết:

Đoạn 2 phải thay thế "(*(E1+(E2)))" theo "(*((E1)+(E2)))", để tránh nhầm lẫn . Vâng, tôi biết rằng biểu đồ cú pháp làm cho nó khá rõ ràng, nhưng từ ngữ hiện tại trong đoạn 2 rất khó hiểu.