Condividi tramite


C6236

Aggiornamento: novembre 2007

C6236

avviso C6236: (<espressione> || <costante diversa da zero>) è sempre una costante diversa da zero

L'avviso indica che un valore di costante diverso da zero e che non sia uno è stato rilevato a destra di un'operazione di OR logico in un contesto di test. Il lato a sinistra dell'operazione di OR logico non viene valutato perché l'espressione risultante restituisce sempre true. Questa condizione viene denominata anche "valutazione short circuit".

Un valore di costante diverso da uno suggerisce che potrebbe essere stato previsto l'operatore AND bit per bit (&). L'avviso non viene generato per il linguaggio comune quando la costante diversa da zero è 1 a causa del relativo utilizzo per l'attivazione selettiva dei percorsi di codice, ma viene generato se la costante diversa da zero restituisce 1, ad esempio 1+0.

Esempio

Nel codice riportato di seguito n++ non viene valutato perché INPUT_TYPE è maggiore di 1.

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   // side effect: n not incremented
   if( n++ || INPUT_TYPE ) //warning 6236 issued
   {
      puts( "Always gets here" );
   }
   else
   {
      puts( "Never enters here" );
   }
}

Nel codice riportato di seguito per risolvere il problema viene utilizzato l'operatore AND bit per bit (&).

#define INPUT_TYPE 2
#include <stdio.h>

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

Vedere anche

Riferimenti

Operatore & (Riferimenti per C#)