为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我们应该经常在C中对结构进行类型化呢?

为什么我们应该经常在C中对结构进行类型化呢?

C
守着一只汪 2019-06-15 17:23:08
为什么我们应该经常在C中对结构进行类型化呢?我见过许多由如下结构组成的程序typedef struct {     int i;     char k;} elem;elem user;为什么这么频繁地需要它?有什么具体原因或适用范围吗?
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

正如格雷格·休吉尔所言,“类型胡枝子”意味着你不必再写文章了。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,因为它的定义对头文件的用户是隐藏的。这是一种广泛使用的技术。GTK+例如。

更新请注意,也有高度重视的C项目,在这些项目中,typedef藏起来struct被认为是个坏主意,Linux内核可能是最著名的这样的项目.见第五章Linux内核CodingStyle文档听莱纳斯生气的话。:我的观点是,问题中的“应”毕竟不是一成不变的。


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 375 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信