在游戏精粹3中的“C 宏 重现光辉”中对宏有相当独到的用法,
网络上没看到相关资料,现大略写下。
//---a.c-----
#define Bin0000 0x00
#define Bin0001 0x01
#define Bin0010 0x02
#define Bin0011 0x03
#define Bin0100 0x04
#define Bin0101 0x05
#define Bin0110 0x06
#define Bin0111 0x07
#define Bin1000 0x08
#define Bin1001 0x09
#define Bin1010 0x0A
#define Bin1011 0x0B
#define Bin1100 0x0C
#define Bin1101 0x0D
#define Bin1110 0x0E
#define Bin1111 0x0F
#define HEX_MK(x,y) (unsigned char) ((x<<4) + y)
#define BIN_MK_4(x1,x2,x3,x4) Bin##x1##x2##x3##x4
#define BIN_2(x,y) HEX_MK(Bin##x,Bin##y)
#define BIN_8(x1,x2,x3,x4,y1,y2,y3,y4) \
HEX_MK( BIN_MK_4(x1,x2,x3,x4), BIN_MK_4(y1,y2,y3,y4) )
int
main ( int argc, char *argv[] )
{
unsigned char v;
v=BIN_8(1,0,1,1,1,1,0,1);
网络上没看到相关资料,现大略写下。
//---a.c-----
#define Bin0000 0x00
#define Bin0001 0x01
#define Bin0010 0x02
#define Bin0011 0x03
#define Bin0100 0x04
#define Bin0101 0x05
#define Bin0110 0x06
#define Bin0111 0x07
#define Bin1000 0x08
#define Bin1001 0x09
#define Bin1010 0x0A
#define Bin1011 0x0B
#define Bin1100 0x0C
#define Bin1101 0x0D
#define Bin1110 0x0E
#define Bin1111 0x0F
#define HEX_MK(x,y) (unsigned char) ((x<<4) + y)
#define BIN_MK_4(x1,x2,x3,x4) Bin##x1##x2##x3##x4
#define BIN_2(x,y) HEX_MK(Bin##x,Bin##y)
#define BIN_8(x1,x2,x3,x4,y1,y2,y3,y4) \
HEX_MK( BIN_MK_4(x1,x2,x3,x4), BIN_MK_4(y1,y2,y3,y4) )
int
main ( int argc, char *argv[] )
{
unsigned char v;
v=BIN_8(1,0,1,1,1,1,0,1);