C中的不透明数据类型

时间:2013-08-14 08:48:41

标签: c api coding-style opaque-pointers

C中返回不透明数据类型的首选方法是什么?

/* Option #1: */
struct widget;
struct widget *foo();

/* Option #2: */
struct widget
{
    struct widget_impl *impl;
};
struct widget foo();

还有其他更惯用的选项吗?

1 个答案:

答案 0 :(得分:1)

这是一个很好的问题而且没有正确的答案,两个选项都能达到相同的效果,但是根据我的经验,选项1更为常见。

<强>差异:

选项1通过环境中指针的最小值来提高空间效率。注意提到“最小”。如果您的包装器结构widget中有额外的字段包含其他有用的信息,那么在struct widget中不返回指向foo的指针将变得非常低效。

实际用途:

当您只处理一个结构时,使用选项1。例如,实现一个结构来保持欧几里德平面上的点或实现动态数组。

在实施ADT时可以看到选项2。您经常需要一个包装器结构来包含额外的字段,因此使用选项2隐式