10.1 C 語言中布爾值的候選類型是什麼?為什麼它不是一個 標準類型?我應該用 #define 或 enum 定義 true 和 false 值嗎?

C 語言沒有提供標準的布爾類型, 部分因為選一個這樣的類型涉及最好由 程序員決定的空間/時間折衷。 (使用 int 可能更快, 而使用 char 可能更節省數據空間。然而, 如果需要和 int 反覆轉換, 那麼小類型也可能生成 更大或更慢的代碼。)

使用 #define 還是枚舉常數定義 true/false 可以隨便, 無關大雅 (參見 問題 2.16 和 17.8)。 使用以下任何一種形式

	#define TRUE  1		#define YES 1
	#define FALSE 0		#define NO  0

    enum bool {false, true};    enum bool {no, yes};
或直接使用 1 和 0 , 只要在同一程序或項目中一致即可。 如果你的調試器 在查看變量的時候能夠顯示枚舉常量的名字, 可能使用枚舉更好。

有些人更喜歡這樣的定義

    #define TRUE (1==1)
    #define FALSE (!TRUE)
或者定義這樣的 ``輔助" 宏
    #define Istrue(e) ((e) != 0)

但這樣於事無益, 參見下邊的問題 9.2, 5.9 和  10.1

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)