Цитата(sergey sva @ Dec 23 2008, 16:49)

>позволяет из левой и правой части, составить единый текстовый символ
#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)
если n = 10; к примеру, то при компиляции ## будет заменено на 10 ?
получится USB_EndPoint10
Да, в случае если выражение ( USB_EP_EVENT & ( 1 << 10 ) ) отлично от нуля.
Скобки вокруг (USB_EP_EVENT & (1 << (n))) лишние, остальные очень даже не лишние