簡體   English   中英

不透明結構的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 foostruct foo的未命名struct typedef不同。 前面的stackoverflow答案清楚地說明了原因:
轉發聲明未命名結構的typedef

轉發未命名結構的聲明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM