2
为什么要对结构使用typedef?
在C语言(ANSI,C99等)中,结构存在于自己的名称空间中。链表的结构可能看起来像这样: struct my_buffer_type { struct my_buffer_type * next; struct my_buffer_type * prev; void * data; }; 然而,对于大多数C程序员来说,自动对这些结构进行如下类型的定义似乎是很自然的: typedef struct tag_buffer_type { struct tag_buffer_type * next; struct tag_buffer_type * prev; void * data; } my_buffer_type; 然后像普通类型一样引用该结构,即get_next_element(my_buffer_type * ptr)。 现在我的问题是:是否有特定原因? 维基百科说http://en.wikipedia.org/wiki/Typedef#Usage_concerns 有些人反对typedef的广泛使用。大多数参数都以typedef仅隐藏变量的实际数据类型为中心。例如,Linux内核黑客和文档编制者Greg Kroah-Hartman阻止将它们用于除函数原型声明以外的任何内容。他认为这种做法不仅不必要地混淆了代码,而且还可能导致程序员意外地滥用大型结构,认为它们是简单的类型。[4] 其他人则认为,使用typedef可以使代码更易于维护。K&R指出使用typedef有两个原因。首先,它提供了使程序更具可移植性的方法。不必更改在程序源文件中出现的所有类型的类型,只需更改单个typedef语句即可。其次,typedef可以使复杂的声明更易于理解。 我个人想知道,使用单独的struct命名空间是否有时没有使用类型定义的结构没有足够的好处,并且由于周围存在着几种C编程文化(我的经验是Windows C编程与Linux C编程有着不同的传统),如果还有其他我不了解的传统。 然后,我对历史考量(C的前身,第一个版本)感兴趣。