我想定义具有非恒定步长的enum。我希望两个枚举变量之间的步长是这样的:
enum test {
a1 = 1,
a2 = 1<<2,
a3 = 1<<3,
a4, // a4 deduced automatically as 1<<4
a5 // a5 deduced automatically as 1<<5
}
是否有一种方法可以像上面的例子那样定义它?
您必须手动执行此操作,或者可能使用宏语法。
this?
#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 %dn", a0, a1, a2, a3, a4, a5);
return 0;
}
如果枚举成员没有赋值,
-
那么第一个枚举成员将考虑为零。
-
对于其他成员,它将通过添加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