所以我知道typedefs对于只能由访问器函数操作的不透明结构是可以接受的。
这是在访问器函数中使用自引用的不透明 typedef 结构的适当方法吗?
typedef struct foo {
struct foo *bar;
int member;
} foo1;
foo1 * blah1 = (foo1*) malloc(...);
blah1->bar->member = 999;
另一种选择是这样的:
typedef struct {
struct foo* bar;
int member;
}foo;
因此,当您执行以下操作时:
foo * blah1 = (foo*) malloc(...);
blah1->bar->member = 999;
您会收到此错误:
dereferencing pointer to incomplete type
这个问题类似于要求前向声明未命名结构。您不能转发声明未命名的结构,同样,您不能将其用作您所示的同一结构中的成员:
typedef struct {
struct foo* bar;
int member;
}foo;
这是因为编译器无法知道类型。 struct foo
与 foo 的未命名结构 typedef 不同。前面的stackoverflow答案清楚地解释了原因:
向前声明未命名结构的类型定义
和
未命名结构的前向声明