Предупреждение C6237
('ноль' && 'expression') всегда равно нулю. Выражение никогда не вычисляется и может иметь побочные эффекты
Это предупреждение указывает на то, что константное значение нуля обнаружено в левой части логического и выполняемого в тестовом контексте операции. Результирующее выражение всегда вычисляется как false. Поэтому справа от логической операции И не вычисляется. Эта функция языка называется "кратковременной оценкой".
Замечания
Следует тщательно проверить правой стороне выражения: убедитесь, что любые побочные эффекты, такие как назначение, вызов функции, добавочный и сокращение операций, необходимых для правильной функциональности, не влияют на оценку короткого канала.
Выражение (0 && n
) не создает побочных эффектов и обычно используется для выборочного выбора путей кода.
Имя анализа кода: ZEROLOGICALANDLOSINGSIDEEFFECTS
Пример
В следующем коде показаны различные примеры кода, которые создают это предупреждение:
#include <stdio.h>
#define INPUT_TYPE 0
int test();
// side effect: n not incremented
void f1( int n )
{
if(INPUT_TYPE && n++) //warning: 6237
{
puts("code path disabled");
}
else
{
printf_s("%d - n was not incremented",n);
}
}
// side effect: test() not called
void f2( )
{
if(INPUT_TYPE && test()) //warning: 6237
{
puts("code path disabled");
}
else
{
puts("test() was not called");
}
}
//side effect: assignment and function call did not occur
void f3( int n )
{
if(INPUT_TYPE && ( n=test() )) //warning: 6237
{
puts("code path disabled");
}
else
{
printf_s("%d -- n unchanged. test() was not called", n);
}
}
Чтобы исправить это предупреждение, используйте следующий код:
#include <stdio.h>
#define INPUT_TYPE 0
int test();
void f1( int n )
{
if(INPUT_TYPE)
{
if(n++)
{
puts("code path disabled");
}
}
else
{
puts("n was not incremented");
}
}
void f2( )
{
if(INPUT_TYPE)
{
if( test() )
{
puts("code path disabled");
}
}
else
{
puts("test() was not called");
}
}
void f3( int n )
{
if(INPUT_TYPE)
{
n = test();
if( n )
{
puts("code path disabled");
}
}
else
{
puts("test() was not called");
}
}
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по