【问题标题】:Is Boolean a Built-in Enum in C?布尔值是 C 中的内置枚举吗?
【发布时间】:2013-10-06 15:52:18
【问题描述】:

我想知道 Boolean 是否是内置枚举。根据维基百科~

"某些枚举器类型可能内置在语言中。布尔值 例如,类型通常是值的预定义枚举 假和真。”

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

在 C 和其他语言中,布尔值是枚举吗?如果不是 - 你能解释一下原因吗?

【问题讨论】:

  • “在 C 和其他语言中”...这个问题无法回答。
  • 许多语言允许将值分配给与枚举标识符不匹配的枚举类型的变量。 C 可以。老笑话是自定义布尔类型支持 false、true 和 filenotfound。

标签: c enums boolean enumeration


【解决方案1】:

boolnative type in C99,而不是枚举。

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

不同之处在于bool 只能包含truefalse(它们是扩展为1 和0 的宏),而枚举可以分配任何整数值。

【讨论】:

    【解决方案2】:

    这个问题更像是一个关于“什么是类型”的抽象哲学问题,而不是关于 C 的问题。在 C 中,一切(或多或少)本质上都是一个整数,但这没有抓住重点。

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

    相比之下,枚举类型是一种只包含离散值集合的类型,这些离散值之间没有进一步的结构。枚举值唯一的属性就是它自己;除了检查相等性之外,没有其他操作。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-10
      • 2011-05-19
      • 2010-11-15
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多