如何在普通C中继承结构

Flo*_*011 3 c inheritance data-structures

我在一个简单的C(嵌入式项目,小内存)工作,我有一个结构

typedef struct 
{
   int x;
   int y;
   int z;
   float angle;
   float angle1;
   float angle2;
} Kind1;
Run Code Online (Sandbox Code Playgroud)

有些情况下,我需要所有字段,有些情况下我只需要x,y和角度.

在C++中,我将使用这3个字段创建一个基类,它将从另一个类继承另外3个字段,并根据需要实例化一个或另一个.如何在普通C中模拟这种行为?

我知道我可以做类似的事情

typedef struct 
{
   int x;
   int y;
   float angle;
} Kind1;

typedef struct
{ 
   Kind1 basedata;
   int z;
   float angle2;
   float angle3;
}  Kind2;
Run Code Online (Sandbox Code Playgroud)

但是我无法将指针传递给Kind2,其中请求指向Kind1的指针.

我知道有可能对指针进行类型转换和偏移,我只是想知道是否有更好,更安全的方法.

Luc*_*ore 5

我知道可以对指针进行类型转换和偏移

不必要:

void foo(Kind1*);
struct Kind2
{ 
   Kind1 basedata;
   int z;
   float angle2;
   float angle3;
}

//...
Kind2 k;
foo(&(k.basedata));
Run Code Online (Sandbox Code Playgroud)