Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
('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" );
}
}