首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中是什么定义了不透明类型,它们在什么时候是必要的和/或有用的?

在C中是什么定义了不透明类型,它们在什么时候是必要的和/或有用的?
EN

Stack Overflow用户
提问于 2010-02-20 15:33:42
回答 3查看 19.7K关注 0票数 60

我看过一些“不透明类型”的概念,但我真的没有找到一个简洁的答案,比如在C中是什么定义了不透明类型,更重要的是,它们允许我们用它们的存在来解决什么问题。谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-20 15:45:47

它是最常用的库用途。在c中,不透明类型背后的主要原理是通过指针使用数据,以便隐藏数据处理实现。由于实现是隐藏的,您可以修改该库,而无需重新编译依赖于它的任何程序(如果该接口受到尊重)

例如:版本1:

代码语言:javascript
复制
// header file
struct s;

int s_init(struct s **x);
int s_f(struct s *x);
int s_g(struct s *x);

// source file
struct s { int x; }

int s_init(struct s **x) { *x = malloc(...); }
int s_f(..) { ... }
int s_g(..) { ... }

版本2

代码语言:javascript
复制
// header file
struct s;

int s_init(struct s **x);
int s_f(struct s *x);
int s_g(struct s *x);

// source file
struct s { int y; int x; }

int s_init(struct s **x) { *x = malloc(...); }
int s_f(..) { ... }
int s_g(..) { ... }

在你的程序方面,什么都没有改变!如前所述,不需要重新编译每个依赖它的程序。

票数 55
EN

Stack Overflow用户

发布于 2010-02-20 15:41:29

在我的理解中,不透明类型是那些允许你持有一个结构的句柄(即指针),但不能直接修改或查看其内容的类型(如果你被允许的话,你可以通过理解内部结构的助手函数来做到这一点)。

在某种程度上,不透明类型是使C更加面向对象的一种方式。它们允许封装,因此类型的内部细节可以更改--或者在不同的平台/情况下以不同的方式实现--而不需要更改使用它的代码。

票数 21
EN

Stack Overflow用户

发布于 2010-02-20 15:41:34

不透明类型是一种在API中通过指针公开但从未具体定义的类型。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2301454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档