Sdílet prostřednictvím


Upozornění C6236

('výraz' || Nenulová konstanta) je vždy nenulová konstanta.

Poznámky

Toto upozornění označuje, že na pravé straně logické operace OR, která se vyskytuje v testovacím kontextu, byla zjištěna nenulová konstantní hodnota, která není nulová. Logicky to znamená, že test je redundantní a dá se bezpečně odebrat. Případně naznačuje, že programátor mohl použít jiný operátor, například rovnost (==), bitwise-AND (&) nebo bitový operátor XOR (^) k otestování konkrétní hodnoty nebo příznaku.

Toto upozornění se negeneruje pro běžný idiom, pokud je nenulová konstanta 1, protože se používá k selektivnímu povolení cest kódu v době kompilace. Upozornění se však vygeneruje, pokud je nenulová konstanta vytvořena výrazem, který se vyhodnotí jako 1, například 1 + 0.

Název analýzy kódu: LOGICALORNONZERO

Příklad

Tento kód ukazuje, jak se může zobrazit upozornění C6236. Protože INPUT_TYPE není 0, výraz n || INPUT_TYPE je vždy nenulový a else klauzule se nikdy nespustí. INPUT_TYPE Je však konstanta s jinou než jednou hodnotou, která naznačuje, že je určená jako hodnota pro porovnání:

#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" );
   }
}

Následující kód místo toho používá bitový operátor AND (&) k otestování, zda INPUT_TYPE je bit vstupního parametru n nastaven:

#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" );
   }
}

Viz také

Bitový operátor AND: &