Назначение в условном операторе
Этот дефект возникает, когда назначение выполняется внутри предиката условного, такого как if
или while
.
В C и C++ один знак равенства является назначением, а не сравнением. Использование одинарного знака равенства в условном операторе может указывать на опечатку или ошибку.
Условный оператор проверяет неправильные значения - операция одинарного знака равенства присваивает значение правого операнда левому операнду. Затем, поскольку это назначение находится внутри предиката условного, программа проверяет, является ли новое значение левого операнда ненулевым или нет NULL.
Проблемы обслуживания и читаемости - даже если назначение предназначено, кто-то, читающий или обновляющий код, может неправильно истолковать назначение как сравнение равенств вместо назначения.
Если назначение является ошибкой, для проверки на равенство добавьте второй знак равенства (==
).
Если назначение внутри условного оператора было преднамеренным, для улучшения читаемости разделите назначение и тест. Переместите назначение за пределы оператора управления. В операторе управления просто проверьте результат назначения.
Если вы не хотите устранять проблему, добавьте комментарии к своему результату или коду, чтобы избежать другой проверки. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.
Группа: Программирование |
Язык: C | C++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки: BAD_EQUAL_USE |
Влияние: Средний |
ИДЕНТИФИКАТОР CWE : 480, 481 |