2010-11-08 6 views
3

Довольно простой вопрос (надеюсь). Учитывая структуру в C (макет которой известен во время компиляции), есть ли способ (через макрос или другой), чтобы я мог получить доступ к позиции байта именованного поля в структуре?Получить позицию поля в конструкции

Поддержка профсоюзов будет бонусом. Компилятор - VC++ 2008. Предположим, что используется #pragma pack(1).

Приветствия

ответ

6

Вы ищете offsetof. Это должно быть в stddef.h, но в случае, если вы не имеете, что пример реализации (от wikipedia):

#define offsetof(st, m) \ 
    ((size_t) ((char *)&((st *)(0))->m - (char *)0)) 

Для объединения, смещение каждого поля 0.

+0

Принято, однако мне пришлось добавить пользовательский макрос offsetofunion, потому что тот, который вы предоставили, не будет поддерживать объединение. Я просто положил союз перед 'st *', и он отлично работал. Благодарю. – Kazar

3

Использовать offsetof, от <stddef.h>.

(Если MSVC++ 2008 не предоставляет его, в этом случае реализуйте свои собственные в соответствии с Carl Norum. Я уверен, что он был с C89, хотя).

Смежные вопросы