C6236
Actualización: noviembre 2007
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 utiliza 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" );
}
}