我想知道布尔值是否是内置枚举。根据维基百科〜
“某些枚举器类型可能内置于该语言中。布尔值 例如,type通常是值的预定义枚举 FALSE和TRUE。“
http://en.wikipedia.org/wiki/Enumerated_type
在C和其他语言中,布尔是一个枚举?如果没有 - 你可以解释原因吗?
答案 0 :(得分:3)
bool
是native type in C99,而不是枚举。
更确切地说,bool是stdbool.h
中定义的宏,它扩展为_Bool
,这是实际的本机类型。
区别在于bool
只能容纳true
或false
(扩展为1和0的宏),而枚举可以分配任何整数值。< / p>
答案 1 :(得分:2)
问题更多的是一个关于“什么是类型”的抽象的,哲学的问题,而不是关于C.在C中,一切(或多或少)都是一个整数,但是忽略了这一点。
当你说“整数”时,你通常指的是算术类型,即加法和乘法等算术运算有意义。
相比之下,枚举类型是仅包含离散值集合的类型,这些离散值集合中没有其他结构。枚举值唯一具有的属性本身;除了检查相等性之外,它没有任何操作。
遗憾的是,整数也是一种枚举类型(它们列举了你的鞋架上可以有的鞋子数量,以及羊群的大小),但是它们还有更多 - 它们具有内部结构通过他们承认的算术运算。
布尔值可以类似地通过忘记它的操作被认为是枚举类型,并且只考虑它枚举两个状态,true和false。但是,布尔值也有一整套定义的操作,由逻辑操作(和,或者不是等)给出,这使得它们与普通枚举不同。从这个意义上讲,布尔值更接近于“一位整数”而不是“枚举”。
总之,每个离散类型都可以被认为是一个枚举(并且由大多数硬件处理相同),但枚举是离散类型的“最弱”,没有超出它们的结构身份。相比之下,整数和布尔值是具有附加(分别是算术和逻辑)结构的离散类型。