[an error occurred while processing this directive]
А как вам такие грабли?
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

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

Отправлено ghost 28 апреля 2005 г. 14:19
В ответ на: 2 Fat Robot - ANSI (ISO/IEC), undefined behavior, integer overflow, u16 - по существу (+) отправлено SM 27 апреля 2005 г. 09:07

Примерно так.

typedef enum {e0,e1,e2} e;
short s=0x8001;
...
if ( (s&0x7FFF)==e1 ) не выполняется, потому что в регистр загружается FFFF8001, затем инструкцией CLR чистится только бит 15, после чего FFFF0001 сравнивается с 1 и не совпадает.

if ( (e)(s&0x7FFF)==e1 ) транслируется точно также.

работает только if ( (short)(s&0x7FFF)==e1 ). Тут да кого-то наконец доходит, что старшие эфы надо потереть.

Компилирую под C64, оптимизация выключена. Как раз вчера выловил.


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

Ответы


Отправка ответа

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

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

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru