我看过许多由以下 struct 组成的程序
typedef struct
{
int i;
char k;
} elem;
elem user;
为什么经常需要它?有什么具体原因或适用范围吗?
我看过许多由以下 struct 组成的程序
typedef struct
{
int i;
char k;
} elem;
elem user;
为什么经常需要它?有什么具体原因或适用范围吗?
正如Greg Hewgill所说,tyecif意味着您不再需要到处写struct
.这不仅节省了击键次数,而且还可以使代码变得更干净,因为它提供了稍微更抽象的东西.
比如
typedef struct {
int x, y;
} Point;
Point point_new(int x, int y)
{
Point a;
a.x = x;
a.y = y;
return a;
}
当你不需要到处看到"struct"关键字时,它看起来更像是你的语言中真的有一种叫做"Point"的类型.typedef
岁之后,我想情况就是这样.
还要注意,虽然您的示例(和我的示例)省略了对struct
本身的命名,但当您想要提供不透明类型时,实际命名它也很有用.然后,您在标题中会有如下代码,例如:
typedef struct Point Point;
Point * point_new(int x, int y);
然后在实现文件中提供struct
定义:
struct Point
{
int x, y;
};
Point * point_new(int x, int y)
{
Point *p;
if((p = malloc(sizeof *p)) != NULL)
{
p->x = x;
p->y = y;
}
return p;
}
在后一种情况下,您不能返回Point by值,因为它的定义对头文件的用户是隐藏的.例如,这是一种在GTK+中广泛使用的技术.
UPDATE请注意,在一些备受推崇的C项目中,使用typedef
来隐藏struct
被认为是一个坏主意,Linux内核可能是此类项目中最知名的.关于莱纳斯的愤怒言辞,请参阅第The Linux Kernel CodingStyle document章第5章.:)我的观点是,问题中的"应该"可能毕竟不是一成不变的.