我想用非恒定步骤定义枚举。我希望 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
}
有没有办法按照上面的例子来定义它?
您必须手动执行此操作,或者可能使用宏观诡计。
这?
#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;
}
如果枚举成员没有分配,
然后将考虑第一个枚举成员为零。
对于其他成员,它只会通过在其上添加一个来使用前一个成员的值。
此外,在您的程序中,赋值 ( =
) 运算符未在枚举定义中使用。它应该如下所示。
#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