gpt4 book ai didi

c - C中相同结构的两个名称

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

我想在我的 .h/.c 对中隐藏 API 公共(public)结构的性质,所以我只在 .h 中声明 typedef,然后在 .c 中完成声明,如下所示:

foo.h

typedef struct filters_s filters_t;

/* some public functions declaration using filters_t */
(...)

foo.c

typedef struct filters_s filter_node_t;

struct filters_s
{
filter_node_t *children[96];

(...)
}

如您所见,filters_s 实际上是树的根节点,所以在内部,我使用的是 filter_node_t,但在外部,我不想暴露结构的“树”性质。所以,我的“问题”是理想情况下我还想为该结构使用另一个名称,例如 filter_node_s,但我不知道这是否可能。

最佳答案

如果你想隐藏结构的实现,那么你需要一个指向结构的不透明指针。在那里,您可以将此指针传递给一个函数,该函数将获取或修改结构的数据。

声明将在*.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");

我刚刚输入了这个,所以它可能不完美,因为我还没有检查错误。永远记得在用完后释放内存。

希望对你有帮助

关于c - C中相同结构的两个名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642965/

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