gpt4 book ai didi

c - 为什么我们要在 C 语言中如此频繁地定义一个结构体?

转载 作者:太空宇宙 更新时间:2023-11-04 04:32:36 24 4
gpt4 key购买 nike

我见过很多由如下结构组成的程序

typedef struct 
{
int i;
char k;
} elem;

elem user;

为什么经常需要它?有什么具体原因或适用范围吗?

最佳答案

正如 Greg Hewgill 所说,typedef 意味着您不再需要到处编写 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 内核可能是最著名的此类项目。参见 The Linux Kernel CodingStyle document 的第 5 章对于Linus 的气话。 :) 我的观点是,毕竟问题中的“应该”可能不是一成不变的。

关于c - 为什么我们要在 C 语言中如此频繁地定义一个结构体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com