【发布时间】: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值。