【发布时间】:2019-07-22 11:38:47
【问题描述】:
通常当我们使用 C 中的关键字“struct”创建一个新结构时,我们可能会在源文件以外的其他文件中使用该结构,我们使用关键字“typedef”来定义指向该结构的指针;
typedef struct struct_name* StructName; // for exmaple
我们为什么不简单地这样定义它;
typedef struct struct_name StructName; // this time i am not using pointers
使用这两种方式有什么不同吗?
【问题讨论】:
-
是的,它们是不同的,第一种形式通常被认为是不好的做法:typedef is evil,总是更喜欢第二种形式。
-
永远不要在 typedef 后面隐藏指针类型,这只会造成混乱。
-
不,最好不要为 ADT 定义这样的 指针。考虑 C
FILE这是一个结构 - 你在任何地方都使用FILE *。 -
“ADT”是什么意思?请阅读标签说明。标签 adt 是关于一个 Android 插件的。
-
@Jabberwocky 通常我会同意,当使用结构用户可以直接取消引用的普通结构时。但是对于只能通过一组 API 函数引用数据的不透明数据结构,我认为这并不重要。
标签: c pointers abstract-data-type