Как в макросе передать параметр в строковый литерал?

09.06.2009
99
0
#1
Как в макросе передать параметр в строковый литерал?

Код:
#define f(s) "left##s##right"
не работает.


Т.к. по команде
Код:
cout << f(my_string) << endl;
выводится left##s##right

а я хотел, чтобы вывелось leftmy_stringright.

Т.е. операция конкатенации ('##') внутри строки почему-то не работает.

Что делать?
 
09.06.2009
99
0
#3
Вопрос решён.

Код:
#define f(s) "left" #s "right"
На другом форуме не стали рассуждать "полезная это вещь или нет?", а просто помогли.
 
A

alexsid

#6
чувак не знает о кросплатформном програмировании,
да и проблем совместимости между версиями API никогда не было...

ему макросы не нужны :)
 
09.06.2009
99
0
#7
по хорошему, аргументы макроса нужно экранировать скобками
Но не внутри строки

чувак не знает о кросплатформном програмировании,
Не знаю. И?

Тем самым раскопав вам очередную яму
То есть?
 
04.09.2006
2 566
3
#8
Не буду долго писать, дам вам ссылочки на 2 книги. Их без труда можно найти в электорнном виде.
1 - Герб Саттер, Андрей Александреску. Стандарты программирования на С++.
Правило 16 - Избегайте макросов.
2 - Скотт Мэйерс (Meyers). Эффективное использование С++. 55 верных способов улучшить структуру и код ваших программм.
Правило 2: Предпочитайте const, enum и inline использованию #define.

Эти книги пережили по несколько изданий, поэтому номера правил могут отличаться. Надеюсь, я чем-то помог вам :)
 
09.06.2009
99
0
#9
European
А есть случаи при написании программ на C++ когда без макросов ну никак не обойтись?
Ну или когда с макросами получается опасней, но ЗАТО код получается более быстрый, короткий и читабельный/обозримый?

1 - Герб Саттер, Андрей Александреску. Стандарты программирования на С++.
Правило 16 - Избегайте макросов.
2 - Скотт Мэйерс (Meyers). Эффективное использование С++. 55 верных способов улучшить структуру и код ваших программм.
А книжку [10]Дьюхэрст С.Х.Скользкие места С++.Как избежать проблем при проектировании и компиляции ваших программ.2006г.264с можно почитать?

Или она хуже тех, названия которых привели Вы?
 
04.09.2006
2 566
3
#10
А есть случаи при написании программ на C++ когда без макросов ну никак не обойтись?
ИМХО, один единственный случай: include guard. Всё остальное безболезнено заменяется на "правильные" конструкции С++.
код получается более быстрый, короткий и читабельный/обозримый?
А вы уверены? В вашем случае, если заменить макрос на inline функцию, то не по одному из пунктов выйгрыша не будет

Или она хуже тех, названия которых привели Вы?
Не читал такую