Какой параметр будет передан 3 или 4?
Стандарт C в основном говорит о двух вещах о m++
:
- Значение это выражение является значением
m
перед выполнением любого приращения. - В качестве побочного эффекта сохраненное значение
m
увеличивается на 1.
Я читал, что в постинкрементном значении изменения после завершения оператора (точка с запятой достигнута)
Это неверно. Стандарт C не указывает c об изменении сохраненного значения. Может измениться до значения этого выражения (но используемое значение все равно будет прежним значением m
, даже если компилятор должен сохранить это значение в каком-то временном месте, чтобы запомнить его) , он может изменить после значения или даже во время использования значения.
Стандарт C имеет некоторые правила по этому поводу , Во-первых, все побочные эффекты завершаются до следующей точки последовательности. Другая причина заключается в том, что после оценки каждого полного выражения существует точка последовательности, которая включает все выражение в выражении . (Выражение-выражение - это выражение, за которым следует точка с запятой.) Поэтому приращение m
произойдет до , оператор завершен, а не после и не обязательно просто до это завершается, но это может происходить в разное время во время оператора.
Другое правило, которое стандарт C имеет относительно побочных эффектов, состоит в том, что после оценки аргументов функции есть точка последовательности звонить и до фактического звонка. Итак, в m=3; function(m++);
переданное значение равно 3, m
изменяется на 4, и вызывается function
, и, кроме того, изменение m
на 4 должно быть завершено до вызова function
.