假设我有一些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
结构体。这样做是否可行,或者是否存在一些(可能是特定于编译器的)问题需要我注意?(例如某种打包/填充方案会更改结构体第一个成员的位置等)?