gpt4 book ai didi

c - 不完整的类型与大小

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:55 24 4
gpt4 key购买 nike

我正在编写一个 C 库,并且有一个看起来(大致)像这样的结构:

struct Obj {
char tag,
union {
int i,
void *v
} val
};

我不想通过 API 公开这个结构的内部结构,因为用户不需要知道实现,他们可能会在未来的版本中发生变化。用户可以通过 API 中的函数与结构进行交互。

我在 API 的其他较大类型的 header 中使用了不完整的类型,用户只能通过指针访问这些类型。我不想限制用户通过指针访问 Obj,因为 Obj 可能最多只有 16 个字节。

我在这里无法使用不完整的类型,因为我不知道有什么方法可以只向用户公开结构的大小,而没有字段。

我的问题是:有没有一种方法可以仅在 C 中公开具有大小的类型(不知道提供给用户的结构中的字段),一些其他的 hack 来完成我想要的,或者我应该以完全不同的方式实现它?

如果我没有提供足够的细节或有任何不清楚的地方,请发表评论。

最佳答案

标准模式是创建一个为用户分配结构的函数:

struct Obj* obj_new(void) {
return malloc(sizeof(struct Obj));
}

然后在您的公共(public) header 中将该类型保留为不完整。

当然,如果您真的只想公开大小,您可以只创建一个返回 sizeof(struct Obj) 的函数。显然人们可能会滥用它(例如,将值硬编码到他们的代码中作为“优化”以避免调用该函数),但这不是你的责任。这是偶尔做的事情,通常是为了帮助促进继承。

关于c - 不完整的类型与大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52902135/

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