Re[8]: Есть еще ма-а-аленький вопрос.
От: Vi2 Удмуртия http://www.adem.ru
Дата: 24.04.02 03:48
Оценка:
Андрей Тарасевич и Кодт, спасибо за содержательные ответы.
Особенно за про неопределенное поведение и за точки следования.
Но теперь вот какой вопрос по следующему коду.
    int z = 1;
    int z2 = z + ++z + ++z;
    z = 1;
    int z3 = ++z + z + ++z;
    z = 1;
    int z4 = ++z + ++z + z;
    sprintf(szDbgBuf,"%d %d %d\n",z2,z3,z4);
    OutputDebugString(szDbgBuf);
Результат: 7 7 9 (MS VC60)

Имеет ли право компилятор подставлять значение z (там, где оно является операндом, я его выделил) отличное от того, которое оно имело ДО начала вычисления выражения, стоящее за знаком "=" ?
Насколько я помню по теории алгоритмов выражение переводит одно состояние в другое, причем предыдущее состояние не меняется и определяет следующее. Поэтому, кажется, каждый из ++ определяет какие-то дополнительные состояния. Т.е. мне не совсем понятна роль этих дополнительных состояний.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.