C语言 如何定义枚举递增步骤



我想定义具有非恒定步长的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

相关内容

  • 没有找到相关文章

最新更新