ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
1392260
Argon (12.01.2024 10:26, просмотров: 697)
А может, кто подскажет, почему компилятор (xc8) не может сгенерировать код 

для выражения

0x8000 | offsetof(tSomeStruct, element)

offsetof определяется так:

#define offsetof(type, member) ((size_t)(((char*)&((type *)1)->member)-1))

Вроде бы ничего необычного, но тем не менее не могёт.
В то время как арифметическую операцию - без проблем:

0x8000 + offsetof(tSomeStruct, element)

Не связано ли это с аппаратным ограничением (12-битная адресация памяти)? Типа компилятор понимает, что работаем с указателем на ячейку памяти и не знает куда сунуть 15й бит в условно 12-битный указатель (хотя переменная, инициируемая offsetof-ом - 16 битная).