C6286
Actualización: noviembre 2007
C6286
Advertencia C6286: (<constante distinta de cero> || <expresión>) es siempre una constante distinta de cero. <expresión> nunca se evalúa y puede tener efectos secundarios
Esta advertencia indica que un valor constante distinto de cero se ha detectado en el lado izquierdo de una operación OR lógica que tiene lugar en un contexto de prueba. La expresión resultante siempre se evalúa como TRUE. Además, el lado derecho de la expresión parece tener efectos secundarios, que se perderán.
Esta advertencia indica que puede ser conveniente examinar con atención el lado derecho de la expresión a fin de asegurarse de que no se pierdan los efectos secundarios necesarios para obtener la funcionalidad correcta.
La construcción (!0 || <expression>) se suele utilizar para forzar la ejecución de un bloque controlado.
Ejemplo
El código siguiente genera esta advertencia:
#include <stdlib.h>
#include <stdio.h>
#define INPUT_TYPE 1
int test();
void f()
{
if (INPUT_TYPE || test())
{
puts("INPUT_TYPE == 1, expression not evaluated");
// code...
}
else
{
puts("INPUT_TYPE == 0. Call to test() returned 0");
// code...
}
}
El código siguiente muestra una posible solución, que consiste en dividir la instrucción if en dos partes independientes:
#include <stdlib.h>
#include <stdio.h>
#define INPUT_TYPE 1
int test();
void f()
{
int i;
if (INPUT_TYPE)
{
i = test();
// code...
}
else
{
puts("INPUT_TYPE false");
// code...
}
}