そういえば、昔参加したプロジェクトでデータを
こんな感じに宣言してたことがあった。(変数名は適当)

#define DATA_HEAD \
 int id; \
 void *next; \
 void *prev; \
 int size; \

typedef struct {
 DATA_HEAD
 data[DATASIZE1];
} DATA1;

typedef struct {
 DATA_HEAD
 data[DATASIZE2];
} DATA2;


今おもうとC言語で「継承」を実装しようと考えられた結果
なんだろうけど、ANSI的には保証外のコードということにな
りますね。
もちろんそのプロジェクトのプログラムは問題なく動いて
いましたが(^^;