Разница между i++ и (i) ++ в C

int i = 3;
int j = (i)++;

против

int i = 3;
int j = i ++;

Есть ли разница между тем, как оцениваются два вышеупомянутых случая?

Первый случай эквивалентен увеличению значения r или это неопределенное поведение?

Ответы

Ответ 1

i++ и (i)++ ведут себя одинаково. C 2018 6.5.1 5 говорит:

Заключенное в скобки выражение является основным выражением. Его тип и значение идентичны типам выражения без скобок. Это lvalue, обозначение функции или выражение void, если не заключенное в скобки выражение является, соответственно, lvalue, указателем функции или выражением void.

Формулировка такая же в C 1999.

Ответ 2

В вашем простом примере i++ сравнению с (i)++ нет никакой разницы, как отмечено в ответе Эрика Постпишила.

Однако это различие действительно имеет смысл, если вы разыменовываете переменную-указатель с помощью оператора * и используете оператор приращения; есть разница между *p++ и (*p)++.

Предыдущий оператор разыменовывает указатель, а затем увеличивает сам указатель; последний оператор разыменовывает указатель, а затем увеличивает разыменованное значение.