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

时间:2016-02-06 19:44:33

标签: c struct styles 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

1 个答案:

答案 0 :(得分:1)

这个问题类似于要求未命名结构的前向声明。 你不能转发声明一个未命名的结构,同样地,你不能将它用作你所显示的同一结构中的成员:

typedef struct {
    struct foo* bar;
    int member;
}foo; 

这是因为编译器无法知道该类型。 struct foo与foo的未命名struct typedef不同。 之前的stackoverflow答案清楚地解释了原因:
Forward declaring a typedef of an unnamed struct

Forward declarations of unnamed struct