在另一个typedef结构

时间:2017-09-03 10:44:30

标签: c struct typedef forward-declaration

我想转发声明一个typedef结构,在另一个结构中使用它,然后实现原始结构。

我尝试过以下代码但不编译。

struct _s1;
struct _s2;

typedef struct _s1 s1;
typedef struct _s2 s2;

typedef struct _big_struct {
    s1 my_s1;
    s2 my_s2;
} big_struct;

struct _s1 {
    int i1;
};

struct _s2{
    int i2;
};

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您只能转发声明类型的存在,然后使用指向它的指针。这是因为指针的大小总是已知的,而前向声明的复合类型的大小却不知道。

struct s1;
struct s2;

struct big_struct {
    struct s1* pmy_s1;
    struct s2* pmy_s2;
};

struct s1 {
    int i1;
};

struct s2{
    int i2;
};

请注意,由于我的背景,我习惯于编写极其向后兼容的代码 Jonathan Leffler在更现代的C标准版本中提供了有关需要/不需要的信息。请参阅以下评论。

答案 1 :(得分:2)

如果你真的被迫使用那个命令(我不在乎为什么),我认为编译它的一件事是通过使struct _big_struct条目指针:

typedef struct s1 s1;
typedef struct s2 s2;

typedef struct _big_struct {
    s1 *my_s1;
    s2 *my_s2;
} big_struct;