c中的枚举关联值

时间:2010-03-24 22:18:55

标签: c enums

我有一个枚举声明:

enum qty { cars = 10, bikes = 9, horses = 9 ... } // total 28

如何将枚举器列表的所有关联值相加?

5 个答案:

答案 0 :(得分:5)

您无法在运行时知道C中的enum的内容。

此外,这听起来像是滥用枚举。您应该使用它们来定义您将在代码中使用的常量,而不是存储数量或其他应该变量的数据:枚举值是不可变的。为此目的使用整数数组;你可以循环使用这些。

答案 1 :(得分:3)

无法在C中表达“对于所有qum中的枚举”。

答案 2 :(得分:1)

没有办法在C中循环它们(你可以在Ada ;-)所以这就是你所能做的:

int sum = cars + bikes + horses + ...;

但是像zneak和Tyler所说,你可能没有使用正确的结构。

答案 3 :(得分:1)

在C中,枚举只是映射到整数。它们甚至不是类型安全的,因为你可以在其他枚举的地方自由地替换一个枚举的成员。

答案 4 :(得分:0)

如果你有很多这些要保持同步,那么一些预处理器滥用可能会派上用场:

#define SUM(name, count) + (count)
#define DEF(name, count) name = (count),

enum qty
{
#   define QTY(f) \
    f(cars,  10)  \
    f(bikes,  9)  \
    f(horses, 9)

    QTY(DEF)

    total = 0 + QTY(SUM)
};