1

我想在我的 .h/.c 对中隐藏 API 的公共结构的性质,所以我只在 .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,但我不知道这是否可能。

4

1 回答 1

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");

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

希望这可以帮助

于 2012-11-30T10:23:08.060 回答