enum Color { RED, GREEN, BLUE }; enum cl {write,gr,bl}; enum Color c1 = BLUE; enum cl c2 = bl; if(c1 == c2) { printf("bl is BLUE\n"); }可以这样比较吗?不行的话该如何改进?
时间: 2023-06-13 13:03:23 浏览: 165
颜色代码对照
不能直接比较enum类型之间的值。因为enum是一种枚举类型,编译器将其编译为整数类型,但它们的实际值是不同的。所以,c1和c2的值虽然相同,但它们的类型不同,因此不能直接比较。
一个解决方法是将枚举类型转换为整数类型,然后进行比较。例如,可以将c1和c2转换为int类型,然后比较它们的值:
```
enum Color { RED, GREEN, BLUE };
enum cl {write,gr,bl};
enum Color c1 = BLUE;
enum cl c2 = bl;
if((int)c1 == (int)c2) {
printf("bl is BLUE\n");
}
```
这样就可以比较它们的值了。需要注意的是,如果枚举类型中的值的数量很大,或者它们的值没有按照顺序排列,那么这种转换方法可能会出现问题。
另一个更好的解决方法是在枚举类型中添加一个成员,该成员用于存储该类型的字符串表示形式。然后,可以使用strcmp函数比较两个枚举类型的字符串表示形式来判断它们是否相等。例如:
```
enum Color { RED, GREEN, BLUE, NUM_COLORS };
const char* const color_names[] = { "RED", "GREEN", "BLUE" };
enum cl {write,gr,bl, NUM_CL };
const char* const cl_names[] = { "write", "gr", "bl" };
enum Color c1 = BLUE;
enum cl c2 = bl;
if(strcmp(color_names[c1], cl_names[c2]) == 0) {
printf("bl is BLUE\n");
}
```
这种方法可以处理枚举类型中的任意数量和任意值的成员,并且不需要将枚举类型转换为整数类型。
阅读全文