マクロ BREF(...) を定義することが可能です:
struct bits
{
int b0:1;
int b1:1;
int b2:1;
int b3:1;
int b4:1;
int b5:1;
int b6:1;
int b7:1;
}
#define BREF(var,bit) ????
#define BAR 4
#define ALIAS BREF(foo,BAR)
unsigned char foo;
このステートメントのように:
ALIAS = 1;
これに展開します:
((struct bits *)&foo)->b4 = 1;
この:
int k = ALIAS;
これに:
int k = ((struct bits *)&foo)->b4;
これまでのところ、これは BREF(...) の私の実装です:
#define BREF(var,bit) (((struct bits *) &(var))->b##bit)
ただし、これbit
は がリテラル数字の場合にのみ機能します。数値に展開されるマクロ変数を渡すことができるようにしたいと考えています。bit
に連結する前にC プリプロセッサを展開するにはどうすればよいb
ですか?