C6236
Обновлен: Ноябрь 2007
C6236
Предупреждение C6236: (<выражение> || <ненулевая константа> ) всегда является ненулевой константой.
Это предупреждение означает, что значение ненулевой константы, отличное от единицы, обнаружено в правой части операции логического ИЛИ в тестовом контексте. При этом левая часть операции логического ИЛИ не вычисляется, поскольку результатом этой операции всегда будет значение true. Это называется "сокращенным вычислением".
Наличие константы со значением, отличным от единицы, означает, что, возможно, предполагалось использовать оператор побитового И (&). Это предупреждение не возникает в распространенных случаях, когда ненулевая константа равна 1, поскольку этот способ применяется для выборочного включения ветвей кода. Однако предупреждение возникает, если результат вычисления ненулевой константы равен 1, например 1+0.
Пример
В следующем коде n++ не вычисляется, поскольку INPUT_TYPE больше 1:
#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" );
}
}
В следующем коде для исправления этого предупреждения используется оператор побитового И (&):
#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" );
}
}