[英]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
與struct foo
的未命名struct typedef不同。 前面的stackoverflow答案清楚地說明了原因:
轉發聲明未命名結構的typedef
和
轉發未命名結構的聲明
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.