По моему мнению, с предварительным и почтовым приращением в C. A post-increment
вступит в силу после утверждения.
Пример:
int num = 10;
int sum = num ++; //sum & num at this point is 10
printf("%d %d", sum, num); //we should get 10 11
При этом pre-increment
вступает в силу немедленно.
int num = 10;
int sum = ++ num ; //num is evaluated to 11 first, then pass in to sum
printf("%d %d", sum, num); //we should get 11 11
Следующие операторы приведут к неожиданным результатам из-за неопределенного поведения в C.
int x = 5;
printf("%d %d %d %d\n", ++x, ++x, ++x, x);
int y = 5;
printf("%d %d %d %d\n", y++, y++, y++, y);
Вывод программы на C:
8 7 6 5
7 6 5 5
Мой вопрос: Почему C не может просто определить точку последовательности слева направо? Все мои прошлые преподаватели в школе учили нас, что в программировании оно оценивается слева направо. Но почему в данном конкретном случае стандарту C так сложно определить порядок выполнения. Мне больше любопытно, почему они не могут интерпретировать это слева направо? По какой причине они не могут этого сделать?
PS: я посетил много постов с похожим названием. Но не решать эту проблему: Почему эти конструкции (с использованием ++) имеют неопределенное поведение?
++
и--
, применяются сразу после вычисления. С нет; за некоторыми исключениями, C оставляет порядок оценки неуказанным и не гарантирует немедленного применения побочных эффектов. - person John Bode   schedule 23.11.2014++x
являетсяx+1
, ноx
не нужно изменять сразу после оценки. Я думаю, что это источник вашего замешательства. - person John Bode   schedule 23.11.2014