Что означает операция c = a +++ b?

Следующий код меня смутил

int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);

Я ожидал, что выход будет 3,5,8, главным образом потому, что ++ означает 2 +1, что равно 3, а 3 + 5 равно 8, поэтому я ожидал 3,5,8. Оказывается, результат 3,5,7. Может кто-нибудь объяснить, почему это так?

Ответ 1

Он анализируется как c = a++ + b, а a++ означает пост-инкремент, т.е. приращение после принятия значения a для вычисления a + b == 2 + 5.

Пожалуйста, никогда не пишите такой код.

Ответ 2

Maximal Runch применяется к такому выражению, согласно которому выражение анализируется как:

c = a++ + b;

То есть a пост-инкрементируется (a++), поэтому текущее значение a (до пост-инкремента) берется для операции + с b.

Ответ 3

a ++ является пост-приращением, то есть выражение принимает значение a, а затем добавляет 1.
c = ++ a + b будет делать то, что вы ожидаете.

Ответ 4

Это пример плохого стиля программирования.

Это довольно непроницаемо, однако он добавляет значение a, поэтому он суммирует текущее значение a с b и затем увеличивает a!

Ответ 5

a ++ получает оценку после выражения.

c = ++ a + b; даст вам то, что вы подумали.

Ответ 6

Оператор post increment, a ++, изменяет значение tge a после того, как значение a оценивается в выражении. Поскольку исходное значение a равно 2, то, что используется для вычисления c; значение a изменяется для отражения нового значения после оценки ++.

Ответ 7

a ++ + b..it дает результат 7 и после того, как значение выражения a обновляется до 3 из-за оператора post increment

Ответ 8

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