可能重複:
Purpose of struct, typedef struct, in C++
typedef struct vs struct definitions結構用typedef
據我所知,已經有C
聲明結構struct point{
int x, y;
};
和兩種方式:
typedef struct{
int x, y;
} point;
但這兩種方法之間的區別是什麼?何時使用typedef方法而不使用其他方法?
可能重複:
Purpose of struct, typedef struct, in C++
typedef struct vs struct definitions結構用typedef
據我所知,已經有C
聲明結構struct point{
int x, y;
};
和兩種方式:
typedef struct{
int x, y;
} point;
但這兩種方法之間的區別是什麼?何時使用typedef方法而不使用其他方法?
只有一個聲明一個struct
在Ç,使用struct
關鍵字,任選接着進行該結構的名稱,然後,接着在括號中的成員字段列表方式。所以你可以有:
struct point_st {
int x, y;
};
這裏point_st
是你的結構的名稱(或標記)。請注意,結構名稱在C中的類型與C中的名稱空間不同(在C++中這是不同的)。所以我有一個後綴_st
的結構名稱的習慣,如上所示。
您可以(獨立地)使用typedef定義類型名稱,例如,
typedef struct point_st Point;
(您可以在任何C型BTW上使用typedef
)。
例如Gtk和Glib有很多不透明的類型,這些不透明的結構;只有實現知道並關心結構成員。
當然,編譯器需要知道結構的字段來分配它;但是如果只使用指向不透明結構的指針,則不需要聲明該結構(即其大括號中的字段)。
差異:
point p;
和第二個。隨着第一種形式,變量聲明必須是:
struct point A;
第二種形式允許在不struct
聲明變量像
point B;
你有一個參考/鏈接爲'強烈建議不使用的typedef爲結構部分? 。 。 。另一個是「我們的C程序設計上帝,Linus Torvalds」? 。 。 。 – paercebal
@paercebal http://www.kernel.org/doc/Documentation/CodingStyle – 2012-08-26 14:03:57