Condividi tramite


C6288

avviso C6288: Operatore errato: l'inclusione reciproca con && è sempre zero. Si intendeva utilizzare ||?

L'avviso indica che in un'espressione di test una variabile viene testata su due diverse costanti e il risultato dipende dallo stato true di entrambe le condizioni. Il codice in tali casi indica che lo scopo del programmatore non è stato acquisito correttamente. È importante esaminare il codice e risolvere il problema; in caso contrario, il codice non si comporterà nel modo previsto.

In genere il problema è causato dall'utilizzo di && in luogo di ||, ma può anche essere causato dall'utilizzo di == laddove era previsto !=.

Esempio

Il codice seguente genera questo avviso:

void f(int x)
{
  if ((x == 1) && (x == 2)) // warning
  {
    // code ...
  }
}

Per risolvere il problema, utilizzare il codice seguente:

void f(int x)
{
     if ((x == 1) || (x == 2)) 
     {
          // logic
     }
    
    /* or */
    if ((x != 1) && (x != 2))
    {
        // code ...
    }
}

Lo strumento di analisi non avvisa se l'espressione ha effetti collaterali.