C / C ++ Структурное смещение - PullRequest
       27

C / C ++ Структурное смещение

36 голосов
/ 27 сентября 2008

Я ищу фрагмент кода, который может сообщить мне смещение поля в структуре без выделения экземпляра структуры.

IE: дано

struct mstct {
    int myfield;
    int myfield2;
};

Я мог бы написать:

mstct thing;
printf("offset %lu\n", (unsigned long)(&thing.myfield2 - &thing));

И получить offset 4 для вывода. Как я могу сделать это без этой mstct thing декларации / выделения?

Я знаю, что &<struct> не всегда указывает на первый байт первого поля структуры, я могу объяснить это позже.

Ответы [ 3 ]

71 голосов
/ 27 сентября 2008

Как насчет стандартного макроса offsetof () (в stddef.h)?

Редактировать: для людей, у которых по какой-то причине может быть недоступен макрос offsetof (), вы можете получить эффект, используя что-то вроде:

#define OFFSETOF(type, field)    ((unsigned long) &(((type *) 0)->field))
8 голосов
/ 27 сентября 2008

Правильно, используйте макрос offsetof, который (по крайней мере для GNU CC) доступен для кода C и C ++:

offsetof(struct mstct, myfield2)
3 голосов
/ 27 сентября 2008

printf ("смещение:% d \ n", & ((mstct *) 0) -> myfield2);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...