我看过许多由如下结构组成的程序
类型定义结构
{
int i;
chark;
}元素;
电子用户;
为什么经常需要它?有任何具体原因或适用范围吗
正如Greg Hewgill所说,typedef意味着你不再需要到处写struct。这不仅可以节省击键次数,还可以使代码更干净,因为它提供了一点抽象
诸如此类
类型定义结构{
int x,y;
}点;
点新点(整数x,整数y)
{
a点;
a、 x=x;
a、 y=y;
返回a;
}
当您不需要到处看到“struct”关键字时,它会变得更干净,看起来更像是您的语言中确实存在一个名为“Point”的类型。在typedef之后,我想是这样的
还要注意的是,虽然您的示例(和我的示例)忽略了对结构本身进行命名,但实际上,当您希望提供不透明类型时,对其进行命名也很有用。然后在标题中有如下代码,例如:
类型定义结构点;
点*点新(整数x,整数y);
然后在实现文件中提供struct定义:
结构点
{
int x,y;
};
点*点_新(整数x,整数y)
{
点*p;
如果((p=malloc(sizeof*p))!=NULL)
{
p->;x=x;
p->;y=y;
}
返回p;
}
在后一种情况下,您不能返回逐点值,因为它的定义对头文件的用户是隐藏的。例如,这是GTK+中广泛使用的一种技术
更新注意,也有一些备受推崇的C项目,其中使用typedef隐藏struct被认为是一个坏主意,Linux内核可能是最著名的此类项目。请参阅Linux内核编码风格文档的第5章,以了解Linus的愤怒言论:我的观点是,问题中的“应该”可能毕竟不是一成不变的