Развернуть макросы внутри строки с кавычками - программирование
Подтвердить что ты не робот

Развернуть макросы внутри строки с кавычками

Возможный дубликат:
C Макросы для создания строк

У меня есть функция, которая принимает один аргумент типа char*, например f("string");
Если строковый аргумент определяется по ходу вызова функции, как макросы могут быть расширены внутри тела строки?

Например:

#define COLOR #00ff00
f("abc COLOR");

будет эквивалентно

f("abc #00ff00");

но вместо этого расширение не выполняется, и функция получает буквально abc COLOR.

В частности, мне нужно развернуть макрос точно \"#00ff00\", чтобы этот цитированный токен был объединен с остальной частью аргумента строки, переданной в f(), включая кавычки; то есть препроцессор должен завершить свою работу и приветствовать компилятор, преобразующий код с f("abc COLOR"); в f("abc \"#00ff00\"");

4b9b3361

Ответ 1

Вы не можете расширять макросы в строках, но вы можете написать

#define COLOR "#00ff00"

f("abc "COLOR);

Помните, что эта конкатенация выполняется препроцессором C и является лишь функцией конкатенации простых строк, а не переменных или так.

Ответ 2

#define COLOR "#00ff00"
f("abc "COLOR);