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