Condividi tramite


Avviso C6236

('expression' || 'costante non zero') è sempre una costante non zero

Questo avviso indica che un valore costante diverso da zero, diverso da uno, è stato rilevato sul lato destro di un'operazione OR logica che si verifica in un contesto di test. Logicamente, implica che il test è ridondante e può essere rimosso in modo sicuro. In alternativa, suggerisce che il programmatore potrebbe avere intenzione di usare un operatore diverso, ad esempio l'uguaglianza (==), l'operatore AND bit per bit () o XOR bit& per bit (^) per testare un valore o un flag specifico.

Osservazioni:

Questo avviso non viene generato per il linguaggio comune quando la costante non zero è 1, a causa del relativo uso per abilitare in modo selettivo i percorsi di codice in fase di compilazione. Tuttavia, l'avviso viene generato se la costante non zero è formata da un'espressione che restituisce 1, ad esempio 1 + 0.

Nome dell'analisi del codice: LOGICALORNONZERO

Esempio

Questo codice mostra come può essere visualizzato l'avviso C6236. Poiché INPUT_TYPE non è 0, l'espressione n || INPUT_TYPE è sempre diversa da zero e la else clausola non viene mai eseguita. Tuttavia, INPUT_TYPE è una costante con un valore diverso da uno, che suggerisce che è un valore per il confronto:

#define INPUT_TYPE 2
#include <stdio.h>

void f( int n )
{
   if ( n || INPUT_TYPE ) // analysis warning C6236
   {
      puts( "Always gets here" );
   }
   else
   {
      puts( "Never enters here" );
   }
}

Il codice seguente usa invece un operatore AND bit per bit (&) per verificare se il INPUT_TYPE bit del parametro n di input è impostato:

#define INPUT_TYPE 2
#include <stdio.h>

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

Vedi anche

Operatore AND bit per bit: &