# V6044. Postfix increment/decrement is senseless because this variable is overwritten.

Анализатор обнаружил потенциальную ошибку, связанную с бессмысленным использованием постфиксного инкремента или декремента в выражении присвоения в эту же переменную.

Давайте рассмотрим пример:

    int i = 5;
    // Some code
    i = i++;

В данном случае инкремент будет бессмысленным, и после выполнения данного кода переменная 'i' будет иметь значение '5'.

Это связано с тем, что постфиксный инкремент и декремент выполняются после вычисления правого операнда оператора присваивания, а результат вычисления временно кэшируется, и после выполнения операций постфиксного инкремента или декремента присваивается левой части выражения. Таким образом результат выполнения постфиксного инкремента или декремента перезаписывается результатом всего выражения.

Корректный же пример может иметь разный вид в зависимости от изначальной задачи.

Это может быть опечатка, и на самом деле программист случайно написал 2 раза переменную 'i' в выражении присвоения. Тогда корректный вариант мог бы выглядеть так:

    int i = 5;
    // Some code
    q = i++;

Либо же программист не знал, что оператор постфиксного инкремента прибавляет единицу к значению переменной, но возвращает начальное ее значение. Тогда операция присвоения будет излишней, и корректный вариант мог бы выглядеть так:

    int i = 5;
    // Some code
    i++;

Данная диагностика классифицируется как:

CWE-682 CERT-EXP05-J