为什么我要使用枚举作为类型?

Why would I use enum as a type?

我看到 post on SO 关于在 C 中使用布尔类型。其中一个答案列出了四种实现布尔类型的方法,第二种和第三种方法是:

typedef enum { false, true } bool;

typedef int bool;
enum { false, true };

第一个一开始让我感到困惑,因为我从未见过 enum 被用作类型。由于 enum 定义了整数常量,所以我认为它与第二个是同一回事,但更令人困惑。

那么,如何使用 enum 作为类型呢?使用 enum 作为类型和使用整数类型,在别处定义 enum 之间有区别吗?最重要的是,为什么有人会使用 enum 作为类型?

通常在编程中,enums 用于创建已定义最终值的列表。因为 booleans 可以是 truefalse,所以很适合这样实现。

您包含的第一个代码位非常简单,它将一个名为 bool 的类型定义为 enum,可以是 truefalse。为什么在枚举中定义它是因为这样在代码中使用 true/false 作为值时不会出现错误。此外,还有一个原因,为什么 false 列在第一位 - 在索引 0 上而 true 在索引 1 上。你能猜到吗? ...您可以通过其索引将 enum 元素转换为 int(意思是:这样当您使用 false 值时,您基本上是在使用 0)。

第二个代码非常相似,它定义了类型 bool,但定义为 integer。那是因为这就是您通常在 C = 1(或任何其他 int 以获得 true)或 0(false)中表示 bools 的方式。 enum 这里的定义再次只是为了防止在使用 truefalse 作为值时出现错误。同样,这些值以这种方式定位是有原因的——多亏了它,您只需执行 if (true)if (false),它就会按预期工作(原因如上所述)。