共用方式為


C6285

更新:2007 年 11 月

警告 C6285: (<非零常數> || <非零常數>) 永遠是非零的常數。您打算使用位元 AND 運算子嗎?

這則警告表示兩個常數值 (兩者都大於一) 都是偵測成邏輯 OR 運算的引數,而這個運算是發生在測試內容中。這個運算式一律為 TRUE。

大於一的常數值是建議邏輯 OR 的引數可為位元欄位 (Bit Field)。請考慮位元運算子 (&) 可能是較適合此情況的運算子。

範例

下列程式碼將產生出這個警告:

#include <stdio.h>
#define     TESTED_VALUE    0x37
#define     MASK            0xaa

void f()
{
  if (TESTED_VALUE || MASK) 
  {
    puts("(TESTED_VALUE || MASK) True");
    // code...
  }
  else 
  {
    puts("(TESTED_VALUE || MASK) False");
    // code...
  }
}

若要更正這則警告,請使用位元 AND (&) 運算子,如下列程式碼所示:

#include <stdio.h>
#define     TESTED_VALUE    0x37
#define     MASK            0xaa

void f(int flag)
{
  if ((TESTED_VALUE & MASK)== flag)
  {
    puts("true");
    // code...
  }
  else
  {
    puts("false");
    // code...
  }
}

請參閱

參考

Bitwise AND Operator: &

Logical OR Operator: ||

編譯器警告 (層級 4) C4127