Предупреждение C6236
('expression' || "ненулевая константа") всегда является ненулевой константой
Это предупреждение указывает на то, что ненулевое значение константы, отличное от одного, было обнаружено справа от логической операции OR, которая возникает в тестовом контексте. Логически это означает, что тест является избыточным и может быть безопасно удален. Кроме того, он предполагает, что программист может использовать другой оператор, например равенство (==
), побитовую И () или побитовую XOR (&
^
) для проверки определенного значения или флага.
Замечания
Это предупреждение не создается для общей идиомы, если ненулевая константа равна 1, из-за его использования для выборочного включения путей кода во время компиляции. Однако предупреждение создается, если константа без нуля формируется выражением, которое оценивается как 1, например 1 + 0.
Имя анализа кода: LOGICALORNONZERO
Пример
В этом коде показано, как может отображаться предупреждение C6236. Так как INPUT_TYPE
значение не равно 0, выражение n || INPUT_TYPE
всегда не равно нулю, и else
предложение никогда не выполняется. INPUT_TYPE
Однако является константой со значением, отличном от одного, которое предполагает, что это означает как значение для сравнения:
#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" );
}
}
Следующий код вместо этого использует побитовый оператор AND (&
) для проверки того, INPUT_TYPE
задан ли бит входного параметра n
:
#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" );
}
}
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по