Uyarı C6299

Bir bit alanını açıkça Boole türüyle karşılaştırmak beklenmeyen sonuçlar verir

Açıklamalar

Bu uyarı, Boolean ve bit alanlarının eşdeğer olduğu varsayımının yanlış olduğunu gösterir. Bit alanlarına 1 atanacak, 1'i tek bitine yerleştirir; ancak, bu bit alanının 1 ile karşılaştırılması, bit alanının imzalı bir int ile örtük bir dökümü içerir. Bu atama, depolanan 1'i -1'e dönüştürür ve karşılaştırma beklenmeyen sonuçlar verebilir.

Kod analizi adı: BITFIELD_TO_BOOL_COMPARISON

Örnek

Aşağıdaki kod bu uyarıyı oluşturur:

struct myBits
{
  short flag : 1;
  short done : 1;
  //other members
} bitType;

void f( )
{
  if (bitType.flag == 1)
  {
  // code...
  }
}

Bu uyarıyı düzeltmek için aşağıdaki kodda gösterildiği gibi bir bit alanı kullanın:

void f ()
{
  if(bitType.flag==bitType.done)
  {
    // code...
  }
}