Share via


C6236

advertencia C6236: (<expresión> || <constante distinta de cero>) siempre es una constante distinta de cero

Esta advertencia indica que un valor constante distinto de cero que no es uno se ha detectado en el lado derecho de una operación OR lógica que tiene lugar en un contexto de prueba.El lado izquierdo de la operación lógica OR no se evalúa porque la expresión resultante siempre se evalúa en true.Esto se conoce como "evaluación cortocircuitada".

Un valor constante distinto de uno sugiere que es posible que la intención fuese utilizar el operador AND bit a bit (&).Esta advertencia no se genera para expresiones comunes en que la constante distinta de cero es 1, debido a su uso para la habilitación selectiva de rutas de acceso de código, pero sí se genera si la constante distinta de cero se evalúa en 1, por ejemplo, 1+0.

Ejemplo

En el código siguiente, no se evalúa n++ porque INPUT_TYPE es mayor que 1:

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   // side effect: n not incremented
   if( n++ || INPUT_TYPE ) //warning 6236 issued
   {
      puts( "Always gets here" );
   }
   else
   {
      puts( "Never enters here" );
   }
}

El código siguiente usa el operador AND (&)bit a bit para corregir esta advertencia:

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   if( n++ & INPUT_TYPE )
   {
      puts( "Bitwise-AND comparison is true" );
   }
   else
   {
      puts( "Bitwise-AND comparison is false" );
   }
}

Vea también

Otros recursos

C++ Bitwise Operators