非定数ステップで列挙型を定義したいと思います。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;
}
列挙メンバーの代入がない場合、
次に、最初の列挙型メンバーにはゼロが考慮されます。
他のメンバーについては、前のメンバーの値に 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