Подтвердить что ты не робот

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

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

IE: данный

struct mstct {
    int myfield;
    int myfield2;
};

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

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

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

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

4b9b3361

Ответ 1

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

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

#define OFFSETOF(type, field)    ((unsigned long) &(((type *) 0)->field))

Ответ 2

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

offsetof(struct mstct, myfield2)

Ответ 3

printf ( "offset:% d\n", & ((mstct *) 0) → myfield2);