我已经看到了“不透明类型”的概念,但我真的没有找到一个简洁的答案,关于什么定义了C中的opaque类型,更重要的是它们允许我们解决它们存在的问题。感谢
答案 0 :(得分:32)
它最常用于图书馆目的。 C语言中Opaque类型背后的主要原则是通过其指针使用数据以隐藏数据处理实现。由于隐藏了实现,您可以修改库而无需重新编译任何依赖它的程序(如果遵循该接口)
例如: 版本1:
// 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版
// 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(..) { ... }
从你的程序方面来看,没有任何改变!并且如前所述,无需重新编译依赖它的每个程序。
答案 1 :(得分:13)
在我的理解中,opaque类型是那些允许你持有句柄(即指针)到结构,但不能直接修改或查看其内容的类型(如果你被允许,你可以通过帮助器这样做)了解内部结构的函数。)
不透明类型在某种程度上是使C更加面向对象的一种方式。它们允许封装,因此类型的内部细节可以改变 - 或者在不同的平台/情况下以不同的方式实现 - 而不使用它的代码必须改变。
答案 2 :(得分:8)
opaque类型是一种通过指针在API中公开但从未具体定义的类型。