是否可以定义宏 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
于文字数字。我希望能够传入一个扩展为数字的宏变量。如何在将 C 预处理器bit
连接到之前扩展它b
?