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

Re: cpp again

От Eugene Grosbein (2:5006/1) к Lev Serebryakov

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


Reply-To: eugen@grosbein.pp.ru

27 май 2009, среда, в 08:19 KRAT, Lev Serebryakov написал(а):

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>> Как сделать правильно?
LS> О, это чОрная-чОрная магия. Hикаких шуток, на столько чОрная что я так и
LS> не
LS> смог её понять и скопипастил.
LS> #define __MYPREFIX_CONCAT_HELPER(x,y) x##y
LS> #define __MYPREFIX_CONCAT(x,y) __MYPREFIX_CONCAT_HELPER(x,y)
LS> #define MYPORT A
LS> /* Define MYPORT_NAME as PORTA */
LS> #define MB_PORT_OUT __MYPREFIX_CONCAT(PORT, MYPORT)
LS> Вот без кавычек если -- то так. С кавычками надо, видимо, ## на # менять.
LS> Заметь -- там просто вызов другого макроса, что и приводит к нужному
LS> результату
LS> (но я не понимаю -- почему, рецепт найден гуглом).

Да, без кавычек работает. Действительно черная магия.
Hо с кавычками не получается :-(

Eugene
--
Устав от радостных пиров,
Hе зная страхов и желаний
--- slrn/0.9.8.1 (FreeBSD)
* Origin: Svyaz Service JSC (2:5006/1@fidonet)

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

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

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

FGHI-url этого письма: area://RU.UNIX.PROG?msgid=www.svzserv.kemerovo.su+2fe28c49