Udostępnij za pośrednictwem


C6240

ostrzeżenie C6240: (<expression> && <non-zero constant>) zawsze ma wynik <expression>.Czy zamierzasz korzystać z operatora bitowego and?

To ostrzeżenie wskazuje, że po prawej stronie operacji logicznej and, która pojawia się w testowanym kontekście, wykryta została niezerowa wartość, inna niż 1.Na przykład, wyrażenie (n && 3) sprowadza się do (!!n), które jest wartością logiczną n.

Zazwyczaj to ostrzeżenie wskazuje próbę sprawdzenia maski bitowej w której powinien być użyty operator bitowy AND (&).Nie jest generowane, gdy niezerowa wartość stała wynosi 1 ze względu na jej użycie do selektywnego wybierania ścieżek kodu.

Przykład

Poniższy kod generuje to ostrzeżenie:

#include <stdio.h>
#define INPUT_TYPE 2

void f(int n)
{
   if (n && INPUT_TYPE) 
   {
      puts("boolean value of !!n is true");
   }
   else
   {
      puts("boolean value of !!n is false");
   }
}

Aby poprawić to ostrzeżenie, użyj operatora bitowego AND, jak pokazano w poniższym kodzie:

#include <stdio.h>
#define INPUT_TYPE 2

void f(int n)
{
   if ( (n & INPUT_TYPE) )
   {
      puts("bitmask true");
   }
   else
   {
      puts("bitmak false");
   }
}

Zobacz też

Informacje

& Operator (C# odniesienia)