Listing 1

#define S1_CLASS int x; \
              int y; \
              int (*read_x)(); \
              int (*read_y)();

typedef struct s1 {
   S1_CLASS
} S1;

#define S2_CLASS S1_CLASS \
              int z; \
              int (*read_z)(); \

typedef struct s2 {
   S2_CLASS
} S2;