假设我有以下枚举文字
enum
{
valueA = 5,
valueB = 7,
valueC = 9,
valueD = 14,
valueE = 15
}myEnumType;
我想遍历每个文字 例如
for (enumType myValEnum = valueA; myValEnum <= valueE; myValEnum++)
{
MyFunction(mValEnum);
}
这行得通吗,或者我最终会用值 5,6,7,8,9,10,11,12,13,14,15 调用 MyFunction 吗?
最佳答案
你不能那样做,在 C 中不支持对枚举进行“foreach”类型的迭代。基本上,枚举只是别名整数,几乎没有额外支持。
您需要使用一个映射表,它允许您将连续的索引映射到枚举类型的值:
static const myEnumType myEnumMap[] = { valueA, valueB, valueC, valueD, valueE};
然后您可以对该数组使用普通循环:
for(size_t i = 0; i < sizeof myEnumMap / sizeof *myEnumMap; ++i)
{
const myEnumType ie = myEnumMap[i];
/* process ie */
}
请注意,myEnumMap
的类型是您的枚举类型,它不是普通的“整数数组”。
这有一个缺点,即需要枚举枚举两次(一次在它自己的定义中,然后在 myEnumMap
初始值设定项中)。可以使用宏技巧(例如 X macros )来解决这个问题,但没有真正方便/容易的方法来做到这一点。
关于c - 在 C 中,如何循环每个没有连续值的枚举文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20993142/