ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
14900 Топик полностью
ReAl (24.09.2004 15:13, просмотров: 1) ответил bialix на может уже пора фак заводить про эти самые undefined behaviour?
Вполне может быть.... Ещё в копилочку. В языке С нет оператора присваивания. Есть assignment expression, присваивающее выражение, само присваивание есть побочным эффектом вычисления этого выражения :-) А все побочные эффекты выполняются "когда угодно", лишь бы до следующей "точки следования" (sequence point). Одна из точек следования - это точка с запятой. Т.е.
 a = b;
Это выражение, значением которого является значение "то, что окажется в a после присваивания".
 a = b = 0;
Оба присваивания - "побочные эффекты", которые могут выполниться в любое время и в любом порядке между двумя точками следования. Так что компилятор имеет право сначала занести 0 в a, потом в b (за исключением случая, когда b - volatile). Тут пока ещё всё нормально :-) Но как бы классику
  a ^= b ^= a ^= b;
лучше не писать, так как тут есть два присваивания a, для которых не гарантируется порядок. И в параноидальном режиме (pedantic) какой-то из gcc-ей на такую строку выдал предупреждение :-).