#define NUM 42
#define CAT3(a, b, c) a ## b ## c
#define __xyz_def(num, what) CAT3(XYZ_, num, what)
#define XYZ_WHAT __xyz_def(NUM, WHAT)
Na, csak meglett. Halványan derengett, hogy valami dupla ugrás kell. Nehéz volt ráguglizni. Az __xyz_def-ben még nem tudsz összefűzni, innen ugrani kell egy másik makróra és ott már igen. Ne kérdezd, nem értem :)
Ízlés szerint az XYZ_-t hardcode-olhatod a CAT3-ba, neki nem kell a dupla ugrás, a NUM-nak kell.