【问题标题】:Opaque data type in CC中的不透明数据类型
【发布时间】:2013-08-14 08:48:41
【问题描述】:
在 C 中返回不透明数据类型的首选方式是什么?
/* Option #1: */
struct widget;
struct widget *foo();
/* Option #2: */
struct widget
{
struct widget_impl *impl;
};
struct widget foo();
还有其他更惯用的选项吗?
【问题讨论】:
标签:
c
api
coding-style
opaque-pointers
【解决方案1】:
这是一个很好的问题,没有正确答案,两个选项都达到了相同的结果,但是根据我的经验,选项 1 更常见。
区别:
选项 1 的空间效率更高,因为您的环境中的指针大小最小。请注意“最低限度”的提及。如果你的包装结构 widget 中有额外的字段包含其他有用的信息,那么在 foo 中不返回指向 struct widget 的指针将变得非常低效。
实际用途:
当您只处理一种结构时,使用选项 1。例如,实现一个结构来保存欧几里得平面上的一个点或同时实现一个动态数组。
在实施 ADT 时可以看到选项 2。您经常需要一个包装器结构来包含额外的字段,因此隐式使用选项 2。