2010-02-27 93 views
5

我剛開始ç最近,我被要求回答在其中出現了下面這段代碼一些編碼練習:易ç枚舉問題

typedef enum { 
    false = 0, 
    true = 1 
} Bool; 

可能有人請提供一個簡單明瞭的解釋那?

非常感謝。

+0

需要功課標籤嗎? – 2010-02-27 17:37:55

+1

每次有人問這樣的問題並且開始回答時,他知道在他發佈答案之前,至少會有另外5個人已經發布了他們自己的答案,希望他可以輕鬆得到100分。 :P – 2010-02-27 17:43:20

+1

因此,有無數用戶回答這個問題。 (無數人在實現重複後刪除了自己,所以你只能在這裏看到6):p – kennytm 2010-02-27 19:45:31

回答

11

它確實在做兩件事;你可以打破它是這樣的:

enum _bool { 
    false = 0, 
    true = 1 
}; 

和:

typedef enum _bool Bool; 

這段代碼創建一個新的枚舉類型,然後使用typedef給它一個方便的名稱。它會讓你在你的代碼的其他地方使用一個叫做Bool的新「類型」,並給它賦值falsetrue。這裏有一個簡單的用例:

Bool logical_not(Bool in) 
{ 
    if (in == true) 
     return false; 
    else 
     return true; 
} 
+0

顯然,提交的代碼不會這樣做,因爲_bool不存在於原始代碼中。我在這裏是因爲我試圖找到一些關於「unnamed枚舉」的文檔,這對我來說是無稽之談解釋這一點需要成爲答案的一部分 – 2018-01-18 22:31:33

+0

枚舉不需要標籤或typedef; enum {A,B,C}是有效的代碼,你想問什麼? – 2018-01-19 05:56:46

1

由於C沒有布爾數據類型,所以您的代碼通過使用typedef來模擬其中的一種。

您可以使用新的用戶定義的數據類型如下:

Bool find_key_in_array() { 
     Bool found = false; // assume not found. 

     // do searching and set found suitably.  

     return found; 
} 

int main() { 

     Bool result = find_key_in_array(); 

     return 0; 
} 
1

它提供可讀文本真假。但你可以猜到。

它是如何工作的?枚舉(關鍵字enum)將一系列標記與整數值連接起來,並且typedef ... Bool;使得Bool成爲枚舉的類型名稱。

整體來說,我會勸阻這個成語,因爲你以後可能會嘗試使用

int flag=false; 
// something happens that might change the setting of flag that *doesn't* use the enum 
if (flag == true) { 
    //... 
} 

如果flag得到了設置爲2,這將不是你所期望的。

如果你長時間使用c,那麼零是假的,其他的一切都是正確的解釋將是第二性質。

1

枚舉是一個整數類型,它具有有限數量的符號值。這允許你做這樣的事情:

Bool finish = false; 

while (finish != true) 
{ 
    ... 
} 
0

從我記得:

此聲明的枚舉,然後相關聯的名字,布爾,這個枚舉(通過的typedef)。 你可以得到更多關於C枚舉的信息here

4

這只是一個枚舉的定義,一個只能假設離散數值的類型,即括在這些括號內的類型。這些值中的每一個都有一個名稱,您可以稍後使用它來引用它。如果只指定值的名稱而不指定實際值,則編譯器將按升序對其進行設置,從第一個元素的零開始。

有關枚舉類型(特別是其C section)的更多信息,請參見wiki article

該特定的枚舉定義了一個布爾類型,即一個只能假設兩個值的類型:true和false,其中false =!true。布爾值在編程中經常使用,例如作爲標誌來指示條件是否被滿足,實際上許多語言將它們包括爲本地類型(例如,C++和C99)。

順便說一句,定義枚舉此:

enum Bool 
{ 
    false = 0, 
    true = 1 
}; 

就足夠了;然而,因爲如何下設計申報bool類型與此代碼的變量,你將需要布爾之前把總是枚舉關鍵字:

enum Bool myFlag=true; 

使用typedef的伎倆,相反,你定義以這種方式創建匿名枚舉,然後爲其提供一個名爲Bool的別名;這樣你就可以簡單地做到:

Bool myFlag=true;