Развернуть макросы внутри строки с кавычками
Возможный дубликат:
C Макросы для создания строк
У меня есть функция, которая принимает один аргумент типа char*
, например f("string");
Если строковый аргумент определяется по ходу вызова функции, как макросы могут быть расширены внутри тела строки?
Например:
#define COLOR #00ff00
f("abc COLOR");
будет эквивалентно
f("abc #00ff00");
но вместо этого расширение не выполняется, и функция получает буквально abc COLOR
.
В частности, мне нужно развернуть макрос точно \"#00ff00\"
, чтобы этот цитированный токен был объединен с остальной частью аргумента строки, переданной в f()
, включая кавычки; то есть препроцессор должен завершить свою работу и приветствовать компилятор, преобразующий код с f("abc COLOR");
в f("abc \"#00ff00\"");
Ответы
Ответ 1
Вы не можете расширять макросы в строках, но вы можете написать
#define COLOR "#00ff00"
f("abc "COLOR);
Помните, что эта конкатенация выполняется препроцессором C и является лишь функцией конкатенации простых строк, а не переменных или так.
Ответ 2
#define COLOR "#00ff00"
f("abc "COLOR);