Цитата(sasamy @ Mar 21 2012, 15:47)

Код
#define ONE 1
#define TWO 2
#define TEST(A,B,MULT) \
A = B<<MULT;
Мне нужно было и имя ONE/TWO оставить и использовать (нельзя переопределять), и количество сдвигов по имени задать.
Конкретно, вот что вышло:
Код
#define GPIO_INIT(PORT,REG,\
BT15,BT14,BT13,BT12,BT11,BT10,BT9,BT8,BT7,BT6,BT5,BT4,BT3,BT2,BT1,BT0) \
GPIO_##REG##_INIT(PORT,BT15,BT14,BT13,BT12,BT11,BT10,BT9,BT8,BT7,BT6,BT5,BT4,BT3,BT2,BT1,BT0)
#define GPIO_MODER_INIT(PORT,\
MD15,MD14,MD13,MD12,MD11,MD10,MD9,MD8,MD7,MD6,MD5,MD4,MD3,MD2,MD1,MD0) \
GPIO##PORT->MODER = \
(MD15<<30|MD14<<28|MD13<<26|MD12<<24|MD11<<22|MD10<<20|MD9<<18|MD8<<16| \
MD7<<14|MD6<<12|MD5<<10|MD4<<8|MD3<<6|MD2<<4|MD1<<2|MD0)
#define GPIO_OTYPER_INIT(PORT,\
OT15,OT14,OT13,OT12,OT11,OT10,OT9,OT8,OT7,OT6,OT5,OT4,OT3,OT2,OT1,OT0) \
GPIO##PORT->OTYPER = \
(OT15<<15|OT14<<14|OT13<<13|OT12<<12|OT11<<11|OT10<<10|OT9<<9|OT8<<8| \
OT7<<7|OT6<<6|OT5<<5|OT4<<4|OT3<<3|OT2<<2|OT1<<1|OT0)
...