【发布时间】:2021-09-09 01:04:00
【问题描述】:
C 中的结构声明了一个数据结构,它将不同的数据类型关联到一块连续的内存中。
Typedef 是一种创建用户定义数据类型名称的方法。这对许多应用程序都很有用,包括<stdint.h>
结构似乎只与 typedef 一起使用。似乎定义struct 的默认行为也应该定义typedef。
我为什么要定义 struct 而不使用 typedef?
【问题讨论】:
-
C++ 的设计者也有同样的感受——在 C++ 中,当你声明一个结构或一个类时,它实际上会自动声明 typedef。但是 C 仍然以旧的方式做事。如果你想要typedef,你必须自己声明它,如果你喜欢每次引用结构类型时都输入
struct,你可以。 -
我为什么要在不使用 typedef 的情况下定义 struct? 相反,你为什么要隐藏你正在处理
struct的事实? -
@AndrewHenle 我猜少打字
-
@EugeneSh。那不是优势。来自kernel.org/doc/html/v4.10/process/coding-style.html#typedefs 当您在源代码中看到
vps_t a;时,这是什么意思?相反,如果它显示struct virtual_container *a;,您实际上可以分辨出a是什么。 -
在 C 语言中有一种重要的情况,您需要使用 struct 标签,那就是您想在定义结构之前声明一个结构指针。你可以在定义
struct foo之前做struct foo *p;,单独使用typedef是无法达到同样效果的。当您有一个包含指向自身的指针的结构或两个包含彼此指针的结构时,就会出现这种情况。我通常在前面声明 typedef:typedef struct foo foo_t;然后你可以在结构定义中使用foo_t *p;。