Я видел интересное заявление сегодня с пост-приращением и предварительным приращением. Пожалуйста, рассмотрите следующую программу:Что произойдет, если я использую pre increment и post increment в том же самом выражении?
#include <stdio.h>
int main(){
int x, z;
x = 5;
z = x++ - 5; // increase the value of x after the statement completed.
printf("%d\n", z); // So the value here is 0. Simple.
x = 5;
z = 5 - ++x; // increase the value of x before the statement completed.
printf("%d\n", z); // So the value is -1.
// But, for these lines below..
x = 5;
z = x++ - ++x; // **The interesting statement
printf("%d\n", z); // It prints 0
return 0;
}
Что происходит на самом деле в этом интересном заявлении? Пост-инкремент должен увеличить значение x после завершения инструкции. Тогда значение первое x остается 5 для этого утверждения. И в случае предварительного приращения значение second x должно быть 6 или 7 (не обязательно).
Почему это дает значение от 0 до z? Было ли это 5 - 5 или 6 - 6? Пожалуйста, объясни.
Вы идете в неопределенное поведение, это действительно зависит от того, как его обрабатывает компилятор. –
Также [этот] (http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points). – jrok