不透明结构的 C typedef 编码风格
C typedef coding style for opaque structs
所以我知道 typedef 对于只能由访问函数操作的不透明结构是可以接受的。
这是在访问器函数中使用自引用的不透明 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 的未命名结构类型定义不同。
之前Whosebug的回答都清楚的说明了原因:
Forward declaring a typedef of an unnamed struct
和
Forward declarations of unnamed struct
所以我知道 typedef 对于只能由访问函数操作的不透明结构是可以接受的。
这是在访问器函数中使用自引用的不透明 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 的未命名结构类型定义不同。
之前Whosebug的回答都清楚的说明了原因:
Forward declaring a typedef of an unnamed struct
和
Forward declarations of unnamed struct