【问题标题】:Why and where should enum be used in C [duplicate]为什么以及在哪里应该在 C 中使用枚举 [重复]
【发布时间】:2021-08-02 21:30:52
【问题描述】:

我对枚举的用途和位置感到有些困惑?使用枚举来定义全局变量(常量)或宏有什么好处?例如在这段代码中:

#include<stdio.h>

enum bool {false, true};

int main()
{
    enum bool b = 100;
    printf("%d", b);
    return 0;
}

我什至可以为b 分配任何整数值,而且一切正常,所以为什么不这样做

int false = 0, true = 1;

#define false 0
#define true 1

在全球范围内?有人可以解释枚举在哪里以及为什么有用并且应该首选使用吗?

【问题讨论】:

  • 如果您使用enum 类型,编译器会理解该值的所有可能值。
  • 在声明变量和函数时可以使用枚举类型。
  • 它使意图自我记录。如果您只是将变量声明为int,则无法判断它应该只包含`true/false`值。
  • 枚举适用于表示通常没有排序的小值集,或者算术运算没有意义(我在另一个答案中给出的示例是enum cartype { sedan, suv, hatchback, coupe };)。使用枚举常量而不是预处理器宏的一个优点是常量名称保留在调试器中,而宏不存在(例如,如果您有一个对象 enum cartype car = sedan; 并且您在调试器中检查该值,调试器将显示 @987654329 @ 而不是 0)。
  • 旁注:您应该使用 C 的 stdbool 而不是定义自己的 true/false 值。

标签: c enums


【解决方案1】:

与#define 宏相比,使用enum 有很多优势:

Advantage and disadvantages of #define vs. constants?

使用枚举常量(enum)有很多优点 使用#define 的传统符号常量样式。这些 优点包括较低的维护要求,改进的程序 可读性和更好的调试能力。

我还鼓励您使用bool(和&lt;stdbool.h&gt;)而不是枚举来表示真/假。

【讨论】:

  • 感谢您的链接,但我对枚举而不是布尔值更感兴趣!
  • 请阅读我在“枚举”上引用的链接(您可以轻松找到许多其他链接!)。明确回答您的问题“问:我应该什么时候使用它们?”答:几乎只要可能 :) 一个大例外:通常,您应该使用枚举而不是“布尔”来表示真/假值(如您的示例中所示)。你也不应该使用“int true=1”或等效的。我希望这会有所帮助:)
猜你喜欢
  • 2011-10-18
  • 2012-04-21
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多