C6236
Ostrzeżenie C6236: (<expression> || <non-zero constant>) jest zawsze stałą niezerową
To ostrzeżenie wskazuje, że po prawej stronie operacji logicznej or, która pojawia się w testowanym kontekście, wykryta została niezerowa wartość, inna niż 1.Lewa strona operacji logicznej lub nie jest szacowana, ponieważ wyrażenie wynikowe zawsze zwróci wartość prawda.To jest określane jako "obliczenie krótkiego cyklu".
Może zostać przeznaczona stała wartość, inna niż sugerowana przez operator bitowy AND (&).To ostrzeżenie nie zostanie wygenerowane dla wspólnego idiomu, gdy stała niezerowa wynosi 1, z uwagi na jej wykorzystanie selektywnego włączania ścieżek kodu, ale zostanie wygenerowane w przypadku, gdy wartość niezerowej stałej wyniesie 1, na przykład 1+0.
Przykład
W poniższym kodzie n++ nie jest szacowane, ponieważ INPUT_TYPE jest większy niż 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" );
}
}
W poniższym kodzie został użyty operator bitowy AND (&), aby naprawić to ostrzeżenie:
#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" );
}
}