2010-06-04 28 views
9

Tôi có một mã nhưCảnh báo C++: đề xuất dấu ngoặc đơn quanh số học trong toán hạng của |

A = B|C|D|E; 

Throwing được cảnh báo "đề nghị ngoặc xung quanh số học trong toán hạng của |"

Mong rằng biểu hiện cần ngoặc ưu tiên cao cho các nhà khai thác, thử các cách sau:

A=(B|C)|(D|E); 

thêm một như:

A=(((B|C)|D)|E); 

Vẫn còn những cảnh báo tương tự vẫn còn.

Hãy giúp tôi giải quyết vấn đề này.

Cảm ơn, Sujatha

B, C, D là sự đếm và E là một số nguyên.

+2

bạn đang sử dụng trình biên dịch nào? –

+1

Ví dụ của bạn biên dịch mà không cần cảnh báo với GCC. –

+4

B C D và E là gì? – James

Trả lời

10

Bạn có một toán tử số học trong biểu thức không thực sự đơn giản là B ý bạn là. Nếu bạn không làm cha mẹ, mọi người phải nhớ chính xác những ưu tiên là gì, và họ phải tìm ra nếu bạn nhớ khi bạn viết nó.

Hãy thử cách này: (B) | (C) | (D) | (E).

+0

B, C, D là enums và E là một số nguyên – Programmer

+0

Tôi nghĩ bạn nên làm những gì greyfade đề xuất, chạy tệp nguồn của bạn thông qua gcc -E. Một trong những enums của bạn có thể vô tình là một vĩ mô mà bạn không biết. –

2

Đây là một cảnh báo kỳ lạ. Bạn chỉ thực sự cần phải chú ý đến ưu tiên khi bạn đang sử dụng các toán tử khác nhau và các toán tử đó có các ưu tiên khác nhau. Ví dụ, trong phép tính số học có ưu tiên cao hơn so với phép cộng.

Nhưng trong trường hợp này, bạn chỉ sử dụng một toán tử nhiều lần. Bitwise hoặc là liên kết và giao hoán ((A | B) | C == A | (B | C)A | B == B | A) vì vậy thực sự không có lý do gì cho cảnh báo.

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