Довольно простой вопрос (надеюсь). Учитывая структуру в C (расположение которой известно во время компиляции), есть ли способ (через макрос или другой), что я могу получить доступ к позиции байта именованного поля в структуре?
Поддержка союзов будет бонусом. Компилятор VC ++ 2008. Предположим, что используется #pragma pack(1).
#pragma pack(1)
Приветствия
Вы ищете offsetof. Это должно быть в stddef.h, но, если у вас его нет, пример реализации (из wikipedia ):
offsetof
stddef.h
#define offsetof(st, m) \ ((size_t) ( (char *)&((st *)(0))->m - (char *)0 ))
Для объединения смещение каждого поля равно 0.
0
Использование offsetof, от <stddef.h>.
<stddef.h>
(За исключением случаев, когда MSVC ++ 2008 не обеспечивает его, в этом случае реализуйте свой собственный, как Карл Норум. Хотя я почти уверен, что он существует с C89).