什么定义了C中的opaque类型,它们何时是必需的和/或有用的?

时间:2010-02-20 07:33:42

标签: c types

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

3 个答案:

答案 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中公开但从未具体定义的类型。