Re[2]: Когда происходит post increment?
От: Кодт Россия  
Дата: 29.04.02 11:23
Оценка:
Здравствуйте DarkGray, Вы писали:

DG>Здравствуйте Silver_s, Вы писали:


SS>>post decrement/increment должен выполняться после вычисления значения выражения, но что нужно понимать под выражением?


SS>>Или стандартом не оговорено когда надо делать пост операции?


DG>Вот здесь был большой разговор на эту тему:

DG>http://www.rsdn.ru/forum/message.asp?mid=48027
Автор: Vi2
Дата: 23.04.02


Тут сразу несколько граблей раскидано.
1) undefined behavior (неопределенное поведение) при неоднократном использовании автоинкремента в выражении
2) правила вычисления оператора &&
3) не инициализированные переменные (j1, j2) (сработает вместе с оператором && )

Наконец, с учетом компиляции в режиме debug (без оптимизаций), мы получили весьма ожидаемый результат.

Вот что родил компилятор

[c]
i_1 = i; // i_1 = 0
i_2 = i; // i_2 = 0 (повезло, что постинкремент выполняется позже)
j1 = i_1 + i_2; // j1 = 0
ok_1 = j1 != 13; // ok_1 = true
i++; i++; // i = 2 (а вот и автоинкремент)

if(!ok_1) goto false_branch;

i_3 = i; // i_3 = 2
i_4 = i; // i_4 = 2
j2 = i_3 + i_4; // j2 = 4
ok_2 = j2 != 13; // ok_2 = true

if(!ok_2) goto false_branch;

true_branch:;
// true
....
goto end_if;

false_branch:;
// false
....

end_if:;

[/code]

При оптимизации — возможны любые, в том числе самые ужасные, результаты.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.