【发布时间】:2014-04-15 06:00:37
【问题描述】:
可能重复:
What is the right way to typedef a type and the same type's pointer?
我最近在我的项目中使用了 Libxml2,并注意到它使用如下类型定义:
typedef struct _xmlNode xmlNode
typedef xmlNode * xmlNodePtr
第一个 typedef 的好处是显而易见的。但是我不确定为什么要为 xmlNode * 分配一个替代名称。对我来说,使用 xmlNode * 比使用 xmlNodePtr 更明确和可读,但我可能会遗漏一些东西。
这个 typedef 会解决什么问题,又会带来什么好处?
【问题讨论】:
-
这是一个品味问题。我同意你的立场(我讨厌
xmlNodePtr-liketypedef-s 的指针)。并且 GTk 不使用它(即使 GCC 内部有一个 typedeftree和另一个 typedefgimple用于指向复杂数据类型的指针)。 -
这些类型的类型定义并不是特别有用。但是指针 typedef 真正有用的一种情况是函数指针,因为原始函数指针语法很难看。
-
FWIW,这是 Linux 内核开发人员的意见以及一些基本原理:kernel.org/doc/Documentation/CodingStyle
标签: c