用于不透明结构的C typedef编码样式

所以我理解typedef对于只能由访问器函数操作的不透明结构是可接受的。

这是使用在访问器函数中自引用的opaque 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 foostruct foo的未命名struct typedef不同。 之前的stackoverflow答案清楚地解释了原因:
转发声明未命名结构的typedef

未命名结构的前向声明