Advertencia C6236

('expression' || 'constante no cero') siempre es una constante que no es cero.

Esta advertencia indica que se detectó un valor de constante distinto de cero, que no es uno, en el lado derecho de una operación OR lógica que se produce en un contexto de prueba. Lógicamente, implica que la prueba es redundante y se puede quitar de forma segura. Como alternativa, sugiere que el programador puede haber tenido la intención de usar un operador diferente, por ejemplo, la igualdad (==), el operador AND bit a bit (&) o el operador XOR bit a bit (^), para probar un valor o una marca específicos.

Comentarios

Esta advertencia no se genera para el lenguaje común cuando la constante que no es cero es 1, debido a su uso para habilitar selectivamente rutas de acceso de código en tiempo de compilación. Sin embargo, la advertencia se genera si la constante distinta de cero está formada por una expresión que se evalúa como 1, por ejemplo, 1 + 0.

Nombre del análisis de código: LOGICALORNONZERO

Ejemplo

Este código muestra cómo puede aparecer la advertencia C6236. Dado INPUT_TYPE que no es 0, la expresión n || INPUT_TYPE siempre no es cero y la else cláusula nunca se ejecuta. Sin embargo, INPUT_TYPE es una constante con un valor distinto de uno, lo que sugiere que está pensado como un valor para la comparación:

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   if ( n || INPUT_TYPE ) // analysis warning C6236
   {
      puts( "Always gets here" );
   }
   else
   {
      puts( "Never enters here" );
   }
}

En su lugar, el código siguiente usa un operador AND bit a bit (&) para probar si se establece el bit INPUT_TYPE del parámetro de entrada n:

#define INPUT_TYPE 2
#include <stdio.h>

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

Consulte también

Operador AND bit a bit: &