Sun Feb 20 2005 16:25, Michael Ryazanov wrote to Yuriy K:
MR>>> Во что должно компилироваться следующее? MR>>> ++pwm; YK>> 6.5.3.1 - 2 YK>> pwm = pwm + 1; MR>>> Здесь ведь написано выражение, имеющее значение. То, что значение не MR>>> используется, по такой логике, не даёт оптимизатору права не MR>>> "зачитывать его заново". YK>> Hет.
MR> Что "нет"? Если не должен зачитывать, то почему, если должен -- зачем?
read (pwm) to (temp) temp = temp+1 write(temp) to (pwm)
Одно чтение и одна запись.
<...>> MR>>> По-моему, из этого можно сделать вывод, что единственная сущность, MR>>> которую можно _сравнивать_ (выделенo YK) MR>>> -- присваеваемое значение. YK>> Hе надо делать выводов, надо RTFM. YK>> iso9899-c99.pdf, 6.5.9 Equality operators: MR> Вот уж к оператору сравнения это никак не относится. Вопрос был в MR> значении оператора присваивания.??? Ты бы определился с вопросом, что-ли. :-)
<...>> MR>>> Hу уж в этой проверке никакой проблемы не вижу. Более того, в SU.C_CPP MR>>> сказали, что присваивание является атомарной операцией. YK>> Тебя обманули. 32-битное присваивание на 8-битной машине не атомарно.MR> Hомер пункта?
Атомарность не гарантируется вообще, кроме единственного исключения.
7.14 ... 2 The type defined is sig_atomic_t which is the (possibly volatile-qualified) integer type of an object that can be accessed as an atomic entity, even in the presence of asynchronous interrupts.MR> Если так, то такое применение volatile дожно порождать MR> неопределённое поведение.
Какое именно применение? Приводи пример.
WBR, Yuriy.