C6235
警告 C6235: (<非零常數> || <運算式>) 永遠為非零的常數
這則警告表示在測試內容中產生之邏輯 OR 運算的左邊偵測到非零的常數值 (一除外)。因為結果運算式一律會評估為 true,所以未評估邏輯 OR 運算的右邊。這就是所謂的「最少運算評估」。
非零常數值 (一以外的值) 表示已故意使用位元 AND 運算子 (&)。當非零的常數為 1 時,並不會針對慣用語產生這則警告,因為可使用它選擇性地啟用程式碼路徑,但是如果非零的常數評估為 1 (例如 1+0) 時,則會產生這項警告。
範例
下列程式碼會因為 INPUT_TYPE 是 2,而產生這則警告:
#define INPUT_TYPE 2
void f(int n)
{
if(INPUT_TYPE || n) //warning 6235 issued
{
puts("Always gets here");
}
else
{
puts("Never gets here");
}
}
下列程式碼會使用位元 AND (&) 運算子,更正這則警告:
#define INPUT_TYPE 2
void f(int n)
{
if((INPUT_TYPE & n) == 2)
{
puts("bitwise-AND comparison true");
}
else
{
puts("bitwise-AND comparison false");
}
}