Invalid use of == operator

Операция равенства в операторе о присвоении

Описание

Этот дефект возникает, когда вы используете оператор равенства вместо оператора назначения в простом операторе.

Риск

Использование == оператор вместо = оператор может бесшумно выдавать неправильные результаты. Если требуется присвоить значение переменной, присвоение не выполняется. Переменная сохраняет свое предыдущее значение или, если не инициализирована ранее, остается неинициализированной.

Зафиксировать

Используйте = (назначение) оператора вместо == (равный) оператор.

Проверка появляется на операторах присвоения и равенства цепей, таких как:

compFlag = val1 == val2;
Для лучшей читаемости кода поместите проверку равенства в круглые скобки.
compFlag = (val1 == val2);

Если используется == оператор предназначен, добавить комментарии к вашему результату или коду, чтобы избежать другого обзора. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.

Примеры

расширить все

void populate_array(void)
{
    int i = 0;
    int j = 0;
    int array[4];

    for (j == 5; j < 9; j++) {
        array[i] = j;
        i++;
    }
}

Внутри for-цикл, оператор j == 5 проверяет ли j равно 5 вместо настройки j по 5. The for-цикл итерация от 0 до 8 из-за j начинается со значения 0, а не 5. Побочным продуктом недопустимого оператора равенства является доступ к массиву вне границ в следующей линии.

Коррекция - Изменение на оператор назначения

Одной из возможных коррекций является изменение == оператор к одному знаку равенства (=). Изменение == знак устраняет оба дефекта, потому что for-цикл повторяет предполагаемое количество раз.

void populate_array(void)
{
    int i = 0;
    int j = 0;
    int array[4];

    for (j = 5; j < 9; j++) {
        array[i] = j;
        i++;
    }
}

Информация о результатах

Группа: Программирование
Язык: C | C++
По умолчанию: On для рукописного кода, off для сгенерированного кода
Синтаксис командной строки: BAD_EQUAL_EQUAL_USE
Влияние: Высокий
ИДЕНТИФИКАТОР CWE : 480, 482
Введенный в R2013b