Цитата(SSerge @ Oct 27 2012, 20:00)

Вообще-то именно те ##, на которые ругается, они лишние, их можно безболезненно удалить или заменить на пробелы.
Если я вас правильно понял, то макрос нужно переделать так:
Код
#define PINCLR(x) (_PORT_POS(x##p)->BSRR=_BIT_BR(x##b))
Это действительно приводит к устранению исходных ошибок, но появляется одна новая:
Код
'GPIO_BSRR_BR0' undeclared (first use in this function) main.c /IndigoTest/src line 39 C/C++ Problem
Symbol 'GPIO_BSRR_BR0' could not be resolved main.c /IndigoTest/src line 39 Semantic Error
Т.е. должно преобразовываться в GPIO_BSRR_BR_0, а по факту GPIO_BSRR_BR0. В IAR'е все нормально.
Да... Пришлось все переосмыслить и в итоге заработало нормально:
Код
// где-то в .h файле
#define _PORT_POS_(a) GPIO##a
#define _PORT_POS(a) _PORT_POS_(a)
#define _BIT_BR_(a) GPIO_BSRR_BR_##a
#define _BIT_BR(a) _BIT_BR_(a)
#define PINCLR(x) (_PORT_POS(x##p)->BSRR=_BIT_BR(x##b))
// где-то в .c файле
#define TESTp B // порт пина
#define TESTb 0 // номер пина
int main() {
PINCLR(TEST); // сбрсываем пин B0 (должно преобразоваться в GPIOB->BSRR = GPIO_BSRR_BR_0)
return 0;
}