vmp (12.08.2009 11:59, просмотров: 151) ответил Vladimir Ljaschko на Мда... Только извращенный ум может понять. Спасибо, буду пробовать.
Идея этого макроса (OFFSET) достаточно проста. Берем адрес 0.
Создаем фиктивную переменную нужного типа по этому адресу:
(type *)0
Обращаемся к нужному полю этой переменной:
((type *)0)->field
Получаем адрес этого поля:
&(((type *)0)->field)
Фактически - это то, что нам нужно. Теперь нужно привести адрес к целому числу.
Приводим к байтовой адресации:
(char *)&(((type *)0)->field)
И вычитаем базовый адрес (нулевой):
((char *)&(((type *)0)->field) - (char *)0)