[an error occurred while processing this directive]
Насколько я помню, как раз такое полностью стандартизовано в виде "результат неопределён"
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ReAl 05 ноября 2006 г. 23:49
В ответ на: похоже, что порядок операций при увеличении индекса не совсем стандартизован отправлено =L.A.= 05 ноября 2006 г. 21:56

Где-то как и
array[i++] = i;

Инкремент cntByte в результате вычисления значения выражения cntByte++ - это "побочный эффект", который может быть произведён в любое время после использования cntByte в правой части оператора сравнения.
Поскольку порядок вычисления операндов оператора сравнения не определён, компилятор имеет полное право сделать так:

temp1 = buf[cntByte]
cntByte = cntByte + 1 (для вычисления buf[cntByte++] cntByte уже использовалось, можно завершить постинкремент)
temp2 = dataHex[cntByte]
if temp1 != temp2 goto ...

что он, похоже, и делает.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание