找出元素是否在枚举中

时间:2010-07-28 15:28:24

标签: c enums

在C中是否有一种简单的方法可以确定枚举是否包含某个元素?

5 个答案:

答案 0 :(得分:11)

没有。 C没有反射,枚举基本上只是作用域,相关的积分常数。

答案 1 :(得分:2)

不是一般情况。有些人采用了一种惯例:

enum xxx
{
    xxx_min = 0,
    xxx_a   = 0,
    xxx_b   = 1,
    ...
    xxx_z   = 42,
    xxx_max = 42
};

#define check_enum(e,n) assert((n)>= e##_min && (n) <= e##_max)

这当然假设枚举值是连续的,并且需要开发人员的许多纪律,因此根据上下文可能会或可能不是一个好主意。

答案 2 :(得分:2)

是的,有一种方法可以检查枚举的部分是否已经初始化。

enum value
{
ENUM_MIN = 0,  
.
.
.
.
.
ENUM_MAX  
};

假设你有int x = -1;

if(x>ENUM_MIN && x< ENUM_MAX)
printf(" Part of enum");

这不适用于以下情况:

enum value
{
ENUM_MIN = 0,
ENUM_TWO =2,
.
.
.
ENUM_MAX
};

如果x的值等于1,则您无法使用上述解决方案。

答案 3 :(得分:1)

实际上,也许。

如果你有一个类似的枚举:

ErrorType { BAD_ERROR = 0, REALLY_BAD_ERROR=1, MAXNUM_ERROR }

然后,无论何时获得ErrorType,您都可以查看:

int error;
error = REALLY_BAD_ERROR;
error = 6;
if (error < MAXNUM_ERROR) { /* error is valid */ }

虽然有点黑客。仅适用于顺序枚举(如果REALLY_BAD_ERROR为3且没有2,则会中断)。

答案 4 :(得分:0)

基本上,唯一的选择是grep文件的声明位置。