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...
}
}