本品適用於C++
。在C++
喜歡:
struct Foo
{
. . .
};
其餘的只適用於C
。
從技術上來說struct Foo {};
已經足夠用於大多數目的。但是,如果使用struct
,則每次使用Foo類型時都必須重複使用。
struct Foo {}
void func(struct Foo* foo);
typedef使這更簡單。
typedef struct Foo { } Foo;
void func(Foo* foo);
在做一個襯墊它也可以使用這個語法:
typedef struct { } Foo;
void func(Foo* foo);
這是創建一個匿名struct
然後給
struct Foo { };
typedef struct Foo Foo;
void func(Foo* foo);
這可以進一步縮短它的名字是Foo。最常見的是enum
s。
typedef enum { } Bar;
原因多餘的Foo通常留在那裏是有原因的。這只是創建自引用結構的唯一方法,就像鏈接列表一樣。
typedef struct Node
{
Node* next;
} Node;
如果初始Node
其中中省略就沒有辦法來聲明一個指針結構。從技術上講,這也是有效的,但現在你必須拿出兩個名字,而不是一個。
typedef struct node_
{
node_* next;
} Node;
那麼,爲什麼使用:
typedef struct Foo { } Foo;
對於均勻性。這種聲明風格涵蓋了你所有的基礎,所以你在聲明一個結構時不需要考慮它。
這就是C而不是C++。你確定你指的是正確的語言嗎? – 2010-04-13 14:54:46
C或C++,在這個例子中沒有區別。在谷歌或書本上查找typedef。 – 2010-04-13 14:55:40
@gbrandt:是的,但沒有理由在C++中聲明一個結構。 – 2010-04-13 14:56:09