我想在我的.h / .c对中隐藏API的公共结构的本质,所以我只在.h中声明了typedef,并在.c中完成声明,如下所示:
typedef struct filters_s filters_t;
/* some public functions declaration using filters_t */
(...)
typedef struct filters_s filter_node_t;
struct filters_s
{
filter_node_t *children[96];
(...)
}
正如您所看到的,filters_s实际上是树的根节点,所以在内部,我使用filter_node_t但在外部,我不想暴露结构的“树”性质。 所以,我的“问题”是理想情况下我想为filter_node_s这样的结构设置另一个名称,但我不知道它是否可能。
答案 0 :(得分:3)
如果要隐藏结构的实现,则需要一个指向结构的不透明指针。在那里,您可以将此指针传递给将获取或修改结构数据的函数。
声明将在* .h头文件中。定义将在* .c文件中。
* .h(头文件)中有类似的内容:
typedef struct tag_device device_t;
然后在* .c(实现文件)中:
struct tag_device {
size_t id;
char *name;
};
void set_data(device_t *dev, size_t id, char *name)
{
dev->id = id;
dev->name = strdup(*name);
}
然后在您的* .c(驱动程序文件)
中device_t *device = malloc(sizeof *device)
set_data(device, 1, "device02345");
我刚刚输入了这个,所以它可能不完美,因为我没有检查错误。完成后请务必记住释放内存。
希望这有帮助