У меня есть следующие макросы:Макрос конкатенации внутри другой макро конкатенации в с
#define __IR(x) ICU.IR[ IR ## x ].BIT.IR
#define _IR(x) __IR(x)
#define IR(x , y) _IR(_ ## x ## _ ## y)
я использую его следующим образом:
IR(SCI7, RXI7) = 0;
Это расширяется:
ICU.IR[ IR_SCI7_RXI7 ].BIT.IR = 0
Вместо использования SCI7
и RXI7
Я хотел бы использовать sci(channel)
и rxi(channel)
. Так что я попытался создать следующие макросы:
#define _sci(x) SCI ## x
#define sci(x) _sci(x)
#define _rxi(x) RXI ## x
#define rxi(x) _rxi(x)
#define channel 7
А потом:
IR(sci(channel), rxi(channel)) = 0;
Но это не сработало. Компилятор возвращает меня:
Ошибка [Pe017]: ожидать «]»
Я пытался с другими способами также, но без успеха.
Что я делаю неправильно?
«Но это не сработало», не могли бы вы уточнить? – Eregrith
@Eregrith Я положил возвращенную ошибку –
Можете ли вы скомпилировать только этап предварительной обработки и посмотреть, что у вас есть? Вы можете сделать это с помощью 'gcc -E', например. – Eregrith