2010-06-04 9 views
9

Tengo un código comoAdvertencia de C++: sugiere paréntesis alrededor de la aritmética en el operando de |

A = B|C|D|E; 

Lanzar la advertencia "se sugieren paréntesis alrededor de la aritmética para operandos de |"

Esperando que la expresión de las necesidades de un paréntesis de alta prioridad para los operadores, trataron las siguientes maneras:

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

una más como:

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

Aún persiste la misma advertencia.

Por favor ayúdenme a resolver esto.

Gracias, Sujatha

B, C, D son enumeraciones y E es un número entero.

+2

¿qué compilador estás usando? –

+1

Su ejemplo se compila sin previo aviso con GCC. –

+4

¿Qué son B C D y E, exactamente? – James

Respuesta

10

Usted tiene un operador aritmético en su expresión que no es simplemente B, o que simplemente no es simplemente C, etc. El compilador sugiere que usted entre paréntesis de cualquier expresión para que los lectores vean que usted escribió lo que te referías. Si no entre paréntesis, todos deben recordar exactamente cuáles son las prioridades, y deben averiguar si recuerdas cuándo lo escribiste.

Pruebe esto: (B) | (C) | (D) | (E).

+0

B, C, D son enumeraciones y E es un número entero – Programmer

+0

Creo que será mejor que hagas lo que sugirió Greyfade, ejecuta tu archivo fuente a través de gcc -E. Una de tus enumeraciones podría ser accidentalmente una macro que no conocías. –

2

Esta es una advertencia extraña. Solo necesita prestar atención a la precedencia cuando usa diferentes operadores y esos operadores tienen diferentes precedencias. Por ejemplo, en la multiplicación aritmética tiene mayor precedencia que la suma.

Pero en este caso solo está utilizando un operador varias veces. Bit a bit o es asociativo y conmutativo ((A | B) | C == A | (B | C) y A | B == B | A) por lo que realmente no hay motivo para la advertencia.

Cuestiones relacionadas