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

列挙メンバーの代入がない場合、

  • 次に、最初の列挙型メンバーにはゼロが考慮されます。

  • 他のメンバーについては、前のメンバーの値に 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 に答える