我有一个关于 C 的问题,并试图模拟部分类型的“继承”,仅在访问结构成员时。看下面的例子:
#pragma pack(push,1)
typedef struct foo
{
int value;
int value2;
}foo;
typedef struct foo_extended
{
// "inherits" foo
int value;
int value2;
// "inherits" foo stops
//we also have some additional data
float additional;
}foo_extended;
#pragma pack(pop)
//! This function works for both foo types
void workboth(void* objP)
{
foo* obj = (foo*)objP;
obj->value = 5;
obj->value2 = 15;
}
//! This works only for the extended
void workextended(foo_extended* obj)
{
obj->value = 25;
obj->value2 = 35;
obj->additional = 3.14;
}
int main()
{
foo a;
foo_extended b;
workboth(&a);
workboth(&b);
workextended(&b);
return 0;
}
这在我的系统中有效,但我的问题是,只要相关结构的正确打包(取决于编译器),这是否可以移植。我想它也需要#ifndefs 正确地调用其他编译器中的紧密打包。
当然,明显的问题是完全缺乏类型检查并将正确使用的所有责任交给程序员,但我想知道这是否可移植。谢谢!
PS:忘了说我尝试遵守的标准是C99