Condividi tramite


Avviso C6286

('costante non zero' || 'expression') è sempre una costante non zero. 'expression' non viene mai valutato e può avere effetti collaterali

Osservazioni:

Questo avviso indica che è stata rilevata una costante non zero sul lato sinistro di un'operazione o logica che si verifica in un contesto di test. L'espressione risultante restituisce sempre TRUE. Inoltre, il lato destro dell'espressione sembra avere effetti collaterali e andranno persi.

È possibile esaminare attentamente il lato destro dell'espressione per assicurarsi che gli effetti collaterali necessari per una corretta funzionalità non vengano persi.

La (!0 || <expression>) costruzione viene comunemente utilizzata per forzare l'esecuzione di un blocco controllato.

Nome dell'analisi del codice: NONZEROLOGICALORLOSINGSIDEEFFECTS

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...
  }
}

Il codice seguente mostra una possibile soluzione suddividendo if l'istruzione 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...
  }
}

Vedi anche

Operatore logico OR: ||