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