Развернуть макрос внутри строкового литерала

То, что я пытаюсь сделать, это #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 (#). Но это другое дело.