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