正如格雷格·休吉爾所言,“類型胡枝子”意味著你不必再寫文章了。struct
到處都是。這不僅可以節(jié)省擊鍵,還可以使代碼更簡潔,因?yàn)樗峁┝烁嗟某橄蟆?/trans>
諸如此類的東西
typedef struct {
int x, y;} Point;Point point_new(int x, int y){
Point a;
a.x = x;
a.y = y;
return a;}
當(dāng)你不需要看到到處都是“struct”關(guān)鍵字的時候,你就變得更干凈了,它看起來更像是你的語言中真的有一種叫做“Point”的類型。在那之后typedef
,我想是這樣的。
還請注意,雖然您的示例(和我的)省略了命名struct
實(shí)際上,當(dāng)您想要提供不透明類型時,實(shí)際上命名它也是有用的。例如,在標(biāo)題中會有這樣的代碼:
typedef struct Point Point;Point * point_new(int x, int y);
然后提供struct
實(shí)現(xiàn)文件中的定義:
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,因?yàn)樗亩x對頭文件的用戶是隱藏的。這是一種廣泛使用的技術(shù)。GTK+例如。
更新請注意,也有高度重視的C項(xiàng)目,在這些項(xiàng)目中,typedef
藏起來struct
被認(rèn)為是個壞主意,Linux內(nèi)核可能是最著名的這樣的項(xiàng)目.見第五章Linux內(nèi)核CodingStyle文檔聽萊納斯生氣的話。:我的觀點(diǎn)是,問題中的“應(yīng)”畢竟不是一成不變的。