共用方式為


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" );
   }
}

請參閱

其他資源

C++ 位元運算子