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



所以我知道typedefs对于只能由访问器函数操作的不透明结构是可以接受的。

这是在访问器函数中使用自引用的不透明 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 与 foo 的未命名结构 typedef 不同。前面的stackoverflow答案清楚地解释了原因:
向前声明未命名结构的类型定义

未命名结构的前向声明

相关内容

  • 没有找到相关文章

最新更新