在C中,如果foo是一個結構體,寫「struct foo」而不是「foo」是否有區別?「struct foo *」和「foo *」之間的區別foo是一個struct嗎?
例如:
struct sockaddr_in sin;
struct sockaddr *sa;
// Are these two lines equivalent?
sa = (struct sockaddr*)&sin;
sa = (sockaddr*)&sin;
感謝/埃裏克
在C中,如果foo是一個結構體,寫「struct foo」而不是「foo」是否有區別?「struct foo *」和「foo *」之間的區別foo是一個struct嗎?
例如:
struct sockaddr_in sin;
struct sockaddr *sa;
// Are these two lines equivalent?
sa = (struct sockaddr*)&sin;
sa = (sockaddr*)&sin;
感謝/埃裏克
事實上,在標準 「C」 它需要指定struct
關鍵字。這在C++中是可選的。
這是一些人這樣定義結構的原因:
typedef struct foo { ... } bar;
能夠使用bar
而不是struct foo
。但是,一些C編譯器不執行此規則。
如果您鍵入它,您可以使用「foo」。
是的。在C中(而不是C++),結構體在它們自己的命名空間中。所以,如果你定義一個
struct sockaddr { ... }
你可能不使用它作爲
sockaddr s;
sockaddr *ps;
爲了使這一法律,你可能爲了導入類型名稱的非結構命名空間使用的typedef:
typedef struct sockaddr { ... } sockaddr;
sockaddr s, *p;
這取決於如何定義結構。如果使用typedef定義它,則不必將stuct關鍵字放在前面。
typedef struct
{
//
} aStruct;
aStruct abc;
但如果它不是typedef,則需要struct關鍵字。
struct aStruct
{
//
} ;
struct aStruct abc;