在C中是否有一种简单的方法可以确定枚举是否包含某个元素?
答案 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文件的声明位置。