C6236
upozornění C6236: (<výraz> || <nenulová konstanta>) je vždy nenulová konstanta
Toto upozornění znamená, že byla na pravé straně logické operace OR vyskytující se v testovacím kontextu zjištěna nenulová konstantní hodnota jiná než jedna.Levá strana logické operace OR není vyhodnocena, protože výsledný výraz bude vždy vyhodnocen jako pravda.To je označováno jako "zkrácené vyhodnocení."
Konstantní hodnota jiná než jedna naznačuje, že byl zamýšlen bitový operátor AND (&).Toto upozornění není vygenerováno pro běžné idiomy, kdy je nenulová konstanta 1, pro jejich využití v selektivním povolení cest kódu, je však generováno v případech, kdy je nenulová konstanta vyhodnocena jako 1, například 1+0.
Příklad
V následujícím kódu není výraz n++ vyhodnocen, protože hodnota makra INPUT_TYPE je větší než 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" );
}
}
Následující kód opravuje toto upozornění použitím bitového operátoru AND (&):
#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" );
}
}