在另一个 typedef 结构中使用的 typedef 结构的前向声明
Forward declaration of typedef struct used in another typedef struct
我想转发声明一个 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;
};
有什么想法吗?
您只能前向声明一个类型的存在,然后使用指向它的指针。这是因为指针的大小始终是已知的,而前向声明的复合类型的大小尚不清楚。
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 标准版本中提供了有关 need/not-need 的信息。请参阅下面的评论。
如果您真的被迫执行该命令(我不在乎为什么),我想到的一件事是通过使结构 _big_struct
条目指针成为编译器:
typedef struct s1 s1;
typedef struct s2 s2;
typedef struct _big_struct {
s1 *my_s1;
s2 *my_s2;
} big_struct;
我想转发声明一个 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;
};
有什么想法吗?
您只能前向声明一个类型的存在,然后使用指向它的指针。这是因为指针的大小始终是已知的,而前向声明的复合类型的大小尚不清楚。
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 标准版本中提供了有关 need/not-need 的信息。请参阅下面的评论。
如果您真的被迫执行该命令(我不在乎为什么),我想到的一件事是通过使结构 _big_struct
条目指针成为编译器:
typedef struct s1 s1;
typedef struct s2 s2;
typedef struct _big_struct {
s1 *my_s1;
s2 *my_s2;
} big_struct;