布尔是C中的内置枚举吗?

时间:2013-10-06 15:52:19

标签: c enums boolean enumeration

我想知道布尔值是否是内置枚举。根据维基百科〜

  

“某些枚举器类型可能内置于该语言中。布尔值   例如,type通常是值的预定义枚举   FALSE和TRUE。“

http://en.wikipedia.org/wiki/Enumerated_type

在C和其他语言中,布尔是一个枚举?如果没有 - 你可以解释原因吗?

2 个答案:

答案 0 :(得分:3)

boolnative type in C99,而不是枚举。

更确切地说,bool是stdbool.h中定义的宏,它扩展为_Bool,这是实际的本机类型。

区别在于bool只能容纳truefalse(扩展为1和0的宏),而枚举可以分配任何整数值。< / p>

答案 1 :(得分:2)

问题更多的是一个关于“什么是类型”的抽象的,哲学的问题,而不是关于C.在C中,一切(或多或少)都是一个整数,但是忽略了这一点。

当你说“整数”时,你通常指的是算术类型,即加法和乘法等算术运算有意义。

相比之下,枚举类型是仅包含离散值集合的类型,这些离散值集合中没有其他结构。枚举值唯一具有的属性本身;除了检查相等性之外,它没有任何操作。

遗憾的是,整数也是一种枚举类型(它们列举了你的鞋架上可以有的鞋子数量,以及羊群的大小),但是它们还有更多 - 它们具有内部结构通过他们承认的算术运算。

布尔值可以类似地通过忘记它的操作被认为是枚举类型,并且只考虑它枚举两个状态,true和false。但是,布尔值也有一整套定义的操作,由逻辑操作(和,或者不是等)给出,这使得它们与普通枚举不同。从这个意义上讲,布尔值更接近于“一位整数”而不是“枚举”。

总之,每个离散类型都可以被认为是一个枚举(并且由大多数硬件处理相同),但枚举是离散类型的“最弱”,没有超出它们的结构身份。相比之下,整数和布尔值是具有附加(分别是算术和逻辑)结构的离散类型。