2010-10-11 70 views
0
typedef struct error{int warning, error, exception;}error; 

main() 
{ 
    error g1; 
    g1.error =1; 
    printf("%d",g1.error); 
} 

這裏使用的是錯誤的是代碼示例,其輸出爲1由struct關鍵字

但我需要的是如何驗證碼正在開發一種解釋?

回答

2

讓我們先從洋蔥內:

struct error 
{ 
    int warning, error, exception; 
}; 

定義一個結構稱爲error有3個要素:warningerrorexception

要使用它,您可以用struct error g1;替換您的main函數中的error g1;行。然後你將這個結構定義包裝在一個typedef中,這基本上告訴編譯器,有一個類型error,它相當於struct error。這些名稱都在獨立的空間中:類型,結構和結構中的元素。所以他們不衝突。也就是說,寫起來有點乾淨

typedef struct 
{ 
    int warning, error, exception; 
} error; 

因爲它沒有給出struct 2的名字。我給出的第一個版本也是有效的;有些人更喜歡明確使用結構。

2

這是什麼,你不明白在這段代碼? error不是C中的保留字,所以您可以自由使用它作爲(變量/結構)名稱。

你定義含有3個int字段struct,實例化其作爲局部變量g1,分配1給它的字段之一,然後打印在標準輸出該字段。如果您有任何更具體的問題,請澄清。

1

您定義了一個結構error,它具有一個名爲errorint成員。您爲struct error定義了typedef(換句話說,別名),名稱爲error。然後您使用typedef名稱創建了struct error的一個實例,名爲g1。然後,您將值1分配給error實例g1error成員。最後,你打印的值爲g1.error

結構名稱和typedef名稱佔用單獨的名稱空間—它們可以是相同的。在C語言中,你必須關鍵字struct前結構的名字:

struct S{ /*...*/ }; 

struct S instance1; 

而不是之前的typedef名稱:

struct S{ /*...*/ }; 
typedef struct S S; 

S instance2; 

你也可以的typedef工會和枚舉。您可以將結構定義有一個typedef定義組合:

typedef struct S { /* ... */ } S; 

而且你可以省略結構名稱:

typedef struct { /* ... */ } S; 

在這種情況下,結構類型只能通過typedef的簡稱。

1

這是c中typedef結構的一個非常基本的用法。我建議你訪問the wikipedia page on structs的總體概述,但在短:

的第一行創建一個新的結構類型struct error其中包含3個整數:warningerrorexception。 typedef充當別名,將struct error重命名爲error,以便您可以通過短名稱引用此類型的項目。

主內部的代碼然後在堆棧上創建一個新的error,將其error屬性設置爲1,然後將其打印出來。