Re: <none>

From
Andrey Tarasevich ()
To
Andrey Tarasevich
Date
2002-10-01T21:34:18Z
Area
RU.ALGORITHMS
From: "Andrey Tarasevich" <atarasevich@telocity.com>

Tue Oct 01 2002 19:58, Andrey Tarasevich wrote to Serge Nozhenko:
 >> 
 >>   (5.17.1): ...The result of an assigment expression is the value stored
 >> in the  left operand _after the assigment has taken place_...
 >> 
 >>   Читать медленно. ;-)
 >> ...

 AT> Я уже читал. И медленно, и быстро :) Читать недостаточно, надо еще
 AT> _понимать_, что именно хотели сказать этим текстом. Частично переведу на
 AT> русский наиболее близко к смыслу: "Результатом assignment expression
 AT> является значение, которое сохранится в левом операнде после выполнения
 AT> присваивания". Надеюсь, теперь понятно, что вторая часть предложения
 AT> носит чисто описательный характер, т.е. говорит о том, какое _значение_
 AT> является результатом, но совершенно не говорит о том, когда именно будет
 AT> выполнено присваивание.

В этом плане также полезно обратить внимание на формулировку в оригинальном
стандарте языка С.

С одной стороны, в разделе 6.3.16 Assignment operators стандарт языка С
говорит:

"... An assignment expression has the value of the left operand after the
assignment ..."

Заметь, что в этой формулировке тоже присутствует слово "after". И в этой
формулировке это слово тоже НЕ налагает никаких временнЫх ограничений. Здесь
НЕТ требования того, чтобы занесение нового значения в левый операнд делалось
до вычисления результата assignment expression. Это предложение просто
описывает, какое значение является результатом assignment expression -
значение является таким _как_ _будто_ оно "прошло сквозь" левый операнд (т.е.
было записано туда и затем прочитано оттуда). Повторяю: как будто.

Тем не менее авторы стандарта языка С все таки понимали, что наличие слова
"after" в вышеприведенной формулировке многими будет понято неправильно. А
именно, найдутся люди, которым покажется, что слово "after" налагает какие-то
временнЫе ограничения на момент занесения нового значения в левый операнд. Для
того, чтобы подчеркнуть неправильность такого толкования, ниже в этот же абзац
стандарта языка С было добавлено следующее предложение:

"The side effect of updating the stored value of the left operand shall occur
between the previous and the next sequence point"

На самом деле этого последнего предложения модно было и не добавлять - это
утверждение уже делалось в других местах стандарта С. Тем не менее авторы
стандарта решили его повторить непосредственно в 6.3.16 для того, чтобы еще
раз напомнить, что изменение значения левого операнда оператора присваивания
является _побочным_ _эффектом_ этого оператора и момент выполнения этого
измененеия (как и любого другого побочного эффекта) точно не определен.
Вышеупомянутое слово "after" ничего здесь не меняет.

-- 
Best regards,
Андрей.

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)