繁体   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