Trong tiêu chuẩn C99, các biểu thức cho phép ưu tiên và kết hợp.Khả năng kết hợp C99 dành cho nhà khai thác - nó được chỉ định ở đâu?
Ưu tiên được ghi nhận khá tốt vì thứ tự các toán tử xuất hiện trong tài liệu là giảm ưu tiên, do đó, các cuộc gọi hàm đến trước toán tử nhân, đến lượt trước các toán tử cộng.
Tuy nhiên, tôi không thể tìm thấy mô tả dứt khoát về kết hợp, cho dù đó là trái hay phải. Điều này quan trọng vì 35/5*2
sẽ là 14
cho một biến thể (35/5)*2
và 3
cho biến thể khác 35/(5*2)
.
Mục 6.5 Expressions /3, footnote 74
nhà nước:
Cú pháp xác định ưu tiên của các nhà khai thác trong việc đánh giá một biểu thức, mà là giống như thứ tự của các subclauses chính của phân lớp này, ưu tiên cao nhất đầu tiên.
Trong mỗi điều khoản chính, người vận hành có cùng quyền ưu tiên. Kết hợp trái hoặc phải được chỉ ra trong mỗi điều khoản bằng cú pháp cho các biểu thức được thảo luận trong đó.
Tuy nhiên, lấy trường hợp nhân giống, ví dụ:
6.5.5 khai thác chất nhân
Cú pháp
multiplicative-expression:
cast-expression
multiplicative-expression * cast-expression
multiplicative-expression/cast-expression
multiplicative-expression % cast-expression
Ràng buộc
Mỗi toán hạng phải có loại số học. Các toán hạng của toán tử%
sẽ là có loại số nguyên.
Semantics
Quá trình chuyển đổi số học thông thường được thực hiện trên các toán hạng.
Kết quả của toán tử nhị phân*
là sản phẩm của toán hạng.
Kết quả của toán tử/
là thương từ phân chia toán hạng đầu tiên theo số giây; kết quả của nhà điều hành%
là phần còn lại. Trong cả hai hoạt động, nếu giá trị của toán hạng thứ hai bằng 0, hành vi là không xác định.
Khi số nguyên được chia, kết quả của toán tử/
là thương số đại số với bất kỳ phần nào được loại bỏ phân đoạn. Nếu thương sốa/b
là biểu thị, thì biểu thức(a/b)*b + a%b
phải bằnga
.
Tôi không thấy gì trong đó đề cập đến liên kết, cũng như không có bất kỳ cài đặt mặc định nào khác trong tiêu chuẩn.
Tôi có thiếu gì đó ở đây không?
Aaahh, tôi hiểu, nó thực sự trong _grammar_ chứ không phải là văn bản giải thích. Điều đó có ý nghĩa. Có lẽ 'biểu thức cast * biểu thức nhân' sẽ là kết hợp đúng. – paxdiablo
Đúng. Tôi đã thêm một ví dụ về tính tương hợp đúng được lấy từ tiêu chuẩn. –
Thats những gì 'Trái hoặc phải kết hợp được chỉ ra trong mỗi subclause bởi cú pháp' trong chú thích là cố gắng để nói. –