Предположим, что у меня есть несколько 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
.
И, что в MethodOperatesOnBase
, я применил параметр void *
к Base *
.
Я хотел бы передать указатели на Bar
и указатели на Foo
на этот метод и полагаться на первый член структуры как структуру Base
.
Является ли это приемлемым или есть некоторые (возможно, специфичные для компилятора) проблемы, о которых мне нужно знать? (Например, какая-то схема упаковки/заполнения, которая изменит местоположение первого члена структуры?)