Aracılığıyla paylaş


C6290

C6290 Uyarı: bitsel mantıksal sonucu işlemi:!daha yüksek önceliğe sahip &.Kullanım & & veya (! ()x & y)) yerine

Bu uyarıyı bir işleç veya işleç önceliği kullanımında olası karışıklığı gösterir.

! İşleci bir Boolean sonucu ortaya çıkarır ve daha yüksek önceliğe sahip &.Bitwise- ve (&) işleci iki aritmetik bağımsız değişken alır.Bu nedenle, aşağıdaki hatalardan biri algılandı:

  • MIS parenthesised ifadesidir:

    Çünkü sonucu ! (sıfır veya bir), iki değişken bit en düşük bit sağ tarafında bulunduğunu sınama yalnızca son ortak olacak olan test denemesi mantıksal değerdir: ((!8) & 1) == 0.

  • ! İşlecini yanlış ve olması gereken bir ~ bunun yerine:

    ! İşleci olan bir Boolean sonucu iken ~ operator aritmetik bir sonucu vardır.Bu işleçlerin hiçbir zaman bile bir Boolean değeri (sıfır veya bir) çalışırken değiştirilebilir,: ((!0x01) & 0x10) == 0x0, sırada ((~0x01) & 0x10) == 0x10.

  • İkili işleç & yanlış ve bunun yerine olmalıdır &&:

    Sırada & ile bazen deyimleri &&, sağ tarafındaki ifade değerlendirme zorlar, eşdeğer değildir, çünkü.Bu tür bir ifadenin bazı yan etkileri terminal olabilir.

Bu sorunun ciddiyetine kodunu inceleyerek olmadan miktarını kararlaştırmak zordur.Kod hedeflenen test ortaya çıkmasını sağlamak için denetlenecek.

Örnek

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

void f(int x, int y)
{
  if (!x & y)
  {
    // code ..
  }
}

Bu uyarı düzeltmek için aşağıdaki örnek kodu kullanın:

void f(int x, int y)
{
  /* When testing that x has no bits in common with y. */
  if (!(x & y))
  {
    // code 
  }

  /* When testing for the complement of x in y. */
  if ((~x) & y)
  {
    // code ...
  }
}
#include <windows.h>
void fC(int x, BOOL y )
 {
  /* When y is a Boolean or Boolean result. */
  if ((!x) && y)
  {
    // code ...
  }
}

Uyarı C6317 bildirilen, ! işleci ise sağ alt tarafında & işleci.

Ayrıca bkz.

Başvuru

C6317