C6286
Aggiornamento: novembre 2007
C6286
avviso C6286: (<costante diversa da zero> || <espressione>) è sempre una costante diversa da zero. <espressione> non viene mai valutata e può avere effetti collaterali
L'avviso indica che un valore di costante diverso da zero è stato rilevato a sinistra di un'operazione di OR logico in un contesto di test. Il valore dell'espressione risultante è sempre TRUE e poiché l'espressione sul lato destro sembra avere effetti collaterali, questi andranno persi.
L'avviso indica che è possibile esaminare attentamente il lato destro dell'espressione per garantire che gli effetti collaterali necessari per garantire una corretta funzionalità del prodotto non vadano perduti.
La costruzione (!0 || <expression>) è generalmente utilizzata per forzare l'esecuzione di un blocco controllato.
Esempio
Il codice seguente genera questo avviso:
#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...
}
}
Nel codice seguente è riportata una possibile soluzione, che consiste nel suddividere l'istruzione if in due parti separate:
#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...
}
}