gpt4 book ai didi

c - 这个结构定义是如何私有(private)的?

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:01 25 4
gpt4 key购买 nike

在一些供应商代码中,我看到结构用作对象,并在头文件中将指向它们的指针用作句柄,如下所示

hdr.h

typedef struct _FOO_Obj_ {
uint16_t x;
} FOO_Obj;

typedef struct FOO_Obj * FOO_Handle;

源文件

#include <hdr.h>
void main (void) {
FOO_Handle bar = FOO_init(); // No error
bar->x = 5; // Error: pointer to incomplete class type
}

这允许包含此类头文件的文件使用 FOO_Handle 类型,但以某种方式阻止访问 FOO_Obj 的成员,例如在 src.c 中标记的行...这里发生了什么??

为了比较,我以前会使用以下内容:

struct FOO_Obj {
uint16_t x;
};
typedef struct FOO_Obj * FOO_Handle;

用这个方法,我还可以:

FOO_Obj y;
FOO_Handle bar (void) { // unintentional bicycle pun ftw
return &y;
}

但是对于第一种方法,同样的函数会导致返回类型不匹配的错误???

最佳答案

结构的类型是struct _FOO_Obj_,在typedef之后,它有一个别名FOO_Obj。但是,没有 struct FOO_Obj 这样的类型。

所以这另一行typedef

typedef struct FOO_Obj * FOO_Handle;

应该是

typedef FOO_Obj * FOO_Handle;

typedef struct _FOO_Obj_ * FOO_Handle;

关于c - 这个结构定义是如何私有(private)的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26276262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com