C стиль кодирования typedef для непрозрачных структур

Поэтому я понимаю, что 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 не такая же, как unnamed struct typedef для foo. Предыдущие ответы stackoverflow четко объясняют причину:
Вперед объявить typedef неназванной структуры
а также
Вперед объявления неназванной структуры