我剛開始ç最近,我被要求回答在其中出現了下面這段代碼一些編碼練習:易ç枚舉問題
typedef enum {
false = 0,
true = 1
} Bool;
可能有人請提供一個簡單明瞭的解釋那?
非常感謝。
我剛開始ç最近,我被要求回答在其中出現了下面這段代碼一些編碼練習:易ç枚舉問題
typedef enum {
false = 0,
true = 1
} Bool;
可能有人請提供一個簡單明瞭的解釋那?
非常感謝。
它確實在做兩件事;你可以打破它是這樣的:
enum _bool {
false = 0,
true = 1
};
和:
typedef enum _bool Bool;
這段代碼創建一個新的枚舉類型,然後使用typedef
給它一個方便的名稱。它會讓你在你的代碼的其他地方使用一個叫做Bool
的新「類型」,並給它賦值false
和true
。這裏有一個簡單的用例:
Bool logical_not(Bool in)
{
if (in == true)
return false;
else
return true;
}
顯然,提交的代碼不會這樣做,因爲_bool不存在於原始代碼中。我在這裏是因爲我試圖找到一些關於「unnamed枚舉」的文檔,這對我來說是無稽之談解釋這一點需要成爲答案的一部分 – 2018-01-18 22:31:33
枚舉不需要標籤或typedef; enum {A,B,C}是有效的代碼,你想問什麼? – 2018-01-19 05:56:46
由於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;
}
它提供可讀文本真假。但你可以猜到。
它是如何工作的?枚舉(關鍵字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,那麼零是假的,其他的一切都是正確的解釋將是第二性質。
枚舉是一個整數類型,它具有有限數量的符號值。這允許你做這樣的事情:
Bool finish = false;
while (finish != true)
{
...
}
從我記得:
此聲明的枚舉,然後相關聯的名字,布爾,這個枚舉(通過的typedef)。 你可以得到更多關於C枚舉的信息here
這只是一個枚舉的定義,一個只能假設離散數值的類型,即括在這些括號內的類型。這些值中的每一個都有一個名稱,您可以稍後使用它來引用它。如果只指定值的名稱而不指定實際值,則編譯器將按升序對其進行設置,從第一個元素的零開始。
有關枚舉類型(特別是其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;
需要功課標籤嗎? – 2010-02-27 17:37:55
每次有人問這樣的問題並且開始回答時,他知道在他發佈答案之前,至少會有另外5個人已經發布了他們自己的答案,希望他可以輕鬆得到100分。 :P – 2010-02-27 17:43:20
因此,有無數用戶回答這個問題。 (無數人在實現重複後刪除了自己,所以你只能在這裏看到6):p – kennytm 2010-02-27 19:45:31