на главнуюВсе эхи RU.UNIX.PROG
войти ?

cpp again

От Lev Serebryakov (2:5030/661.1) к Eugene Grosbein

В ответ на Заголовок предыдущего сообщения в треде (Имя Автора)


Hello Eugene.

27 May 09 11:17, you wrote to all:

EG> #define D 13
EG> Хочу определить макрос A(N) так, чтобы A(D) раскрывалось в "139\1"
EG> Пробую так:
EG> #define S(a) # a
EG> #define A(N) S(N ## 9\1)
EG> A(D) раскрывается в "D\91"
EG> Как сделать правильно?

О, это чОрная-чОрная магия. Hикаких шуток, на столько чОрная что я так и не смог её понять и скопипастил.

#define __MYPREFIX_CONCAT_HELPER(x,y) x##y
#define __MYPREFIX_CONCAT(x,y) __MYPREFIX_CONCAT_HELPER(x,y)

#define MYPORT A

/* Define MYPORT_NAME as PORTA */
#define MB_PORT_OUT __MYPREFIX_CONCAT(PORT, MYPORT)

Вот без кавычек если -- то так. С кавычками надо, видимо, ## на # менять. Заметь -- там просто вызов другого макроса, что и приводит к нужному результату (но я не понимаю -- почему, рецепт найден гуглом).

// Lev
--- GoldED+/W32 1.1.4.7
* Origin: Cave of Black Lion (2:5030/661.1)

Ответы на это письмо:

From: Username
Заголовок следующего сообщения в треде может быть длинным и его придется перенести на новую строку

From: Username
Или коротким

FGHI-url этого письма: area://RU.UNIX.PROG?msgid=2:5030/661.1+4a1cdc3b