9
A
回答
13
在C99中,您應該使用stdbool.h
,它定義了bool
,true
和false
。
否則你有什麼是好的。只使用枚舉可能會更簡單一些,但如果你真的想節省空間,你有什麼工作。
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
,並且定義了true
和false
。如果你使用它,它會與你的typedef衝突,但我相信這將是一件容易的事情來解決。
0
我建議用一點來表示真或假,而不是一個字符。一個字符使用8位,我們可以將1設置爲true,將0設爲false,只需要1位。這將更有記憶效率,也符合目的。 (例如)字符標誌:1;
相關問題
- 1. 空旗是壞習慣嗎?
- 2. 使用默認參數健康習慣還是壞習慣?
- 3. Scrum Master的壞習慣
- 4. Class scope typedef壞習慣?
- 5. 是mysql_connect頭部壞習慣?
- 6. 爲什麼重寫window.onresize壞習慣?
- 7. 習慣在Objective-C
- 8. 使用幻數是好習慣嗎?
- 9. 這是使用iframe的好習慣嗎
- 10. 在被認爲是壞習慣的Perl子程序中使用標籤?
- 11. 這是使用數據庫調用時的一個壞習慣嗎?
- 12. hjkl習慣破壞 - 軟版本
- 13. 第二組狀態回調 - 壞習慣?
- 14. 創建一個Catch-All AppToolbox類 - 這是一個壞習慣嗎?
- 15. 是PHP返回錯誤對象的壞習慣嗎?
- 16. Java - 這是一個類的使用來編輯一個標籤壞習慣嗎?
- 17. 這是在Angular JS項目中使用jQuery的好習慣嗎?
- 18. 在void函數中使用exit是錯誤的好習慣嗎?
- 19. 在mod_rewrite中使用雙重定向是一個好習慣嗎?
- 20. 在ContentProvider中使用rawQuery是一個好習慣嗎?
- 21. 在populator中使用轉換器是一個好習慣嗎?
- 22. 在Neo4J中使用「id」屬性是一個好習慣嗎?
- 23. 在網站主頁上使用flash是否被認爲是壞習慣?
- 24. 在C#中不使用Exception類的消息字段是一個好習慣嗎?
- 25. 是否將php.ini的session.auto_start設置爲1認爲是壞習慣?
- 26. 使用枚舉爲int是一個好習慣嗎?
- 27. 爲了在C壞習慣中返回多個值而使用多個函數參數?
- 28. 從函數中打印bool值是否是一種好習慣?
- 29. 將州作爲道具傳遞給孩子是好習慣嗎?
- 30. 在Hibernate中將setter私有標記爲好習慣嗎?
可能是他的平臺擁有'的sizeof(any_enum_t)==的sizeof(int)的'。 – Potatoswatter 2010-10-04 04:05:39
@Potato:啊,對。我只是不認爲這可能是值得的。雖然不是一種損失,但是, (如果我沒有弄錯,順便說一句,那個特定的枚舉必須具有基本類型'int'。) – GManNickG 2010-10-04 04:12:57
我的C很生鏽,但我認爲'int'的要求是一個C++ 03-ism。由於x86-64 ABI也有同樣的說法,不過,它們之間的差別不大。 – Potatoswatter 2010-10-04 04:35:01