2010-10-04 48 views

回答

13

在C99中,您應該使用stdbool.h,它定義了bool,truefalse

否則你有什麼是好的。只使用枚舉可能會更簡單一些,但如果你真的想節省空間,你有什麼工作。

+2

可能是他的平臺擁有'的sizeof(any_enum_t)==的sizeof(int)的'。 – Potatoswatter 2010-10-04 04:05:39

+0

@Potato:啊,對。我只是不認爲這可能是值得的。雖然不是一種損失,但是, (如果我沒有弄錯,順便說一句,那個特定的枚舉必須具有基本類型'int'。) – GManNickG 2010-10-04 04:12:57

+0

我的C很生鏽,但我認爲'int'的要求是一個C++ 03-ism。由於x86-64 ABI也有同樣的說法,不過,它們之間的差別不大。 – Potatoswatter 2010-10-04 04:35:01

1

我覺得很好,很乾淨。

3

typedef char bool;的缺點是,如果您使用C99實現進行編譯,並且碰巧包含<stdbool.h>,那麼最終結果爲typedef char _Bool;,這是錯誤的。另外,如果你曾經嘗試將代碼編譯爲C++,你會遇到問題(這不一定是問題,但可能是)。

如果您的實施提供了一個或使用不同名稱的類型,如BOOL,那麼最好使用<stdbool.h>

5

簡短的回答是:沒關係。如果您需要製作大型陣列,這特別好,儘管我會試圖使用C99內置的。

既然你問「有沒有任何缺點......」我想我可以說有些已經是實際上沒有一個字加載指令重要的機器。 (Cray和最初的DEC Alpha就會浮現在腦海中。)未來的機器可能會突然一下子變得微不足道了。

它會總是要加載一個標準的整型。

它會可能總是快加載單個字符。


1.參見C99 6.2.5。有一個內置的類型_Bool。然後,如果包含<stdbool.h>(請參閱C99 7.16),則會得到一個別名,這個別名的名稱更爲正式,命名爲bool,並且定義了truefalse。如果你使用它,它會與你的typedef衝突,但我相信這將是一件容易的事情來解決。

0

我建議用一點來表示真或假,而不是一個字符。一個字符使用8位,我們可以將1設置爲true,將0設爲false,只需要1位。這將更有記憶效率,也符合目的。 (例如)字符標誌:1;

參考:http://en.wikipedia.org/wiki/Bit_field

+1

高效內存並不一定意味着更好。訪問位可能非常慢,並且不必要的複雜。 – GManNickG 2010-10-04 04:22:43

+0

使用Bool數據類型更好,我同意。它也是1位。但你能解釋一下爲什麼它很慢。我是新手! – sethu 2010-10-04 05:16:22

+0

@GMan:如果你需要大量的整數位置索引的布爾值,一個位數組肯定是要走的路。如果它只是一個單值,那麼使用'int'或C99'bool'就完全沒問題。我看不出有什麼理由使用'char'。 – 2010-10-04 06:01:41

相關問題