Предположим, у меня есть несколько структур C, для которых я хотел бы работать с определенным набором функций.
Мне интересно, является ли следующий подход допустимым:
typedef struct Base {
int exampleMember;
// ...
} Base;
typedef struct Foo {
Base base;
// ...
} Foo;
typedef struct Bar {
Base base;
// ...
} Bar;
void MethodOperatesOnBase(void *);
void MethodOperatesOnBase(void * obj)
{
Base * base = obj;
base->exampleMember++;
}
В этом примере вы заметите, что обе структуры Foo
и Bar
начинаются с Base
member.
И, что в MethodOperatesOnBase
я приведу параметр void *
к Base *
.
Я бы хотел передать указатели на Bar
и указатели на Foo
к этому методу и полагаться на то, что первый член структуры будет Base
struct.
Это приемлемо, или есть некоторые (возможно, специфичные для компилятора) проблемы, о которых мне нужно знать?(Например, какая-то схема упаковки / заполнения, которая изменила бы местоположение первого члена структуры?)