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