【问题标题】:C typedef coding style for opaque structs不透明结构的 C typedef 编码风格
【发布时间】:2023-04-08 15:17:01
【问题描述】:

所以我知道 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

【问题讨论】:

    标签: c struct styles typedef


    【解决方案1】:

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

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

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

    Forward declarations of unnamed struct

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多