Partager via


C6236

Note

This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here

warning C6236: (<expression> || <non-zero constant>) is always a non-zero constant

This warning indicates that a non-zero constant value, other than one, was detected on the right side of a logical OR operation that occurs in a test context. Logically, this implies that the test is redundant and can be removed safely. Alternatively, it suggests that the programmer may have intended to use a different operator, for example, the equality (==), bitwise-AND (&) or bitwise-XOR (^) operator, to test for a specific value or flag.

This warning is not generated for the common idiom when the non-zero constant is 1, because of its use for selectively enabling code paths at compile time. However, the warning is generated if the non-zero constant is formed by an expression that evaluates to 1, for example, 1 + 0.

Example

This code shows how warning C6236 can appear. Because INPUT_TYPE is not 0, the expression n || INPUT_TYPE is always non-zero, and the else clause is never executed. However, INPUT_TYPE is a constant with a value other than one, which suggests that it is meant as a value for comparison:

#define INPUT_TYPE 2  
#include <stdio.h>  
  
void f( int n )  
{  
   if ( n || INPUT_TYPE ) // analysis warning C6236  
   {  
      puts( "Always gets here" );  
   }  
   else  
   {  
      puts( "Never enters here" );  
   }  
}  

The following code instead uses a bitwise-AND (&) operator to test whether the INPUT_TYPE bit of the input parameter n is set:

#define INPUT_TYPE 2  
#include <stdio.h>  
  
void f( int n )  
{  
   if ( n & INPUT_TYPE ) // no warning  
   {  
      puts( "Bitwise-AND comparison is true" );  
   }  
   else  
   {  
      puts( "Bitwise-AND comparison is false" );  
   }  
}  

See Also

C++ Bitwise Operators