2012-08-26 156 views

回答

1

只有一個聲明一個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有很多不透明的類型,這些不透明的結構;只有實現知道並關心結構成員。

當然,編譯器需要知道結構的字段來分配它;但是如果只使用指向不透明結構的指針,則不需要聲明該結構(即其大括號中的字段)。

2

差異:

  1. 第一個是有效C89;
  2. 第一個不會使結構(「點」)的標籤成爲一個完整的類型定義,因此您只能使用point p;和第二個。
  3. 我們的C語言編程上帝,Linus Torvalds強烈鼓勵不使用 typedefs結構(除非明確需要隱藏實際字段和類型在不透明結構後面),因爲它會降低可讀性。
+0

你有一個參考/鏈接爲'強烈建議不使用的typedef爲結構部分? 。 。 。另一個是「我們的C程序設計上帝,Linus Torvalds」? 。 。 。 – paercebal

+0

@paercebal http://www.kernel.org/doc/Documentation/CodingStyle – 2012-08-26 14:03:57

0

隨着第一種形式,變量聲明必須是:

struct point A; 

第二種形式允許在不struct聲明變量像

point B;