Развернуть макрос внутри строкового литерала
То, что я пытаюсь сделать, это #define
макрос:
#define a(2)
а затем использовать его внутри строкового литерала: string = "a";
.
Я хочу, чтобы эта строка интерпретировалась не как строка, а чтобы получить значение a
, то есть 2. Мне не удалось, может ли кто-нибудь помочь?
Ответы
Ответ 1
#define STRINGIFY2(X) #X
#define STRINGIFY(X) STRINGIFY2(X)
#define A 2
Тогда STRINGIFY(A)
даст вам "2"
. Вы можете объединить его с другими строковыми литералами, поставив их рядом друг с другом.
"I have the number " STRINGIFY(A) "."
дает вам "I have the number 2."
.
Ответ 2
Нет, вы не можете выполнять строковые литералы с расширением макроса INSIDE (т.е. иметь препроцессор для просмотра внутри литералов для расширения макросов).
У вас может быть расширение макроса для создания строкового литерала, начинающегося с оператора stringify (#
). Но это другое дело.