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

标签 c struct names

我想在我的 .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/

相关文章:

c - 关于随机整数生成的准则(C)

c - 读取 CSV 文件 - 内存问题

python - python 对象的可读名称作为字典键

c - 通过套接字传递链表

c - 在 C 中使用 getopt 作为命令行参数

c - 如何在 GTK/GDK 中直接写入显示缓冲区

c - 如何在c中声明一个结构?

c - 结构访问代表文件名?

r - 使用 `mutate` 使用命名向量创建列副本

methods - 在方法名称中使用 "get"的最佳实践是什么?