1

我想用非恒定步骤定义枚举。我希望 2 个枚举变量之间的步骤如下所示:

enum test {
   a1 = 1,
   a2 = 1<<2,
   a3 = 1<<3,
   a4, // a4 deduced automatically as 1<<4
   a5 // a5 deduced automatically as 1<<5
}

有没有办法按照上面的例子来定义它?

4

3 回答 3

3

您必须手动执行此操作,或者可能使用宏观诡计。

于 2013-01-15T17:21:02.863 回答
2

这?

#include <stdio.h>

#define enum_(x, n) x##n=1<<n

enum type {
    enum_(a, 0),
    enum_(a, 1),
    enum_(a, 2),
    enum_(a, 3),
    enum_(a, 4),
    enum_(a, 5)
};

int main(void)
{
    printf("%d %d %d %d %d %d\n", a0, a1, a2, a3, a4, a5);
    return 0;
}
于 2013-01-15T17:52:22.120 回答
1

如果枚举成员没有分配,

  • 然后将考虑第一个枚举成员为零。

  • 对于其他成员,它只会通过在其上添加一个来使用前一个成员的值。

此外,在您的程序中,赋值 ( =) 运算符未在枚举定义中使用。它应该如下所示。

#include <stdio.h>
enum test 
{
   a1 = 1,
   a2 = 1<<2,
   a3 = 1<<3,
   a4, // a4 deduced automatically as 1<<4
   a5 // a5 deduced automatically as 1<<5
};

void main()
{
   printf("%d, %d", a4, a5);
}

输出是

9, 10
于 2013-01-15T17:25:05.177 回答