2013-12-17 3 views
13

То, что я пытаюсь сделать, это #define макрос:Развернуть макроса внутри строкового литерала

#define a(2) 

, а затем использовать его внутри строкового литерала: string = "a";.

Я хочу, чтобы эта строка интерпретировалась не как строка, а для получения значения a, т. Е. 2. Мне не удалось, может кто-нибудь помочь?

+1

@Jefffrey - Эта шляпа была сделана специально для вашего динозавра. – Maroun

ответ

16
#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

Теперь добавьте ключевой элемент, который смежные строковые литералы объединяются, и это ответ. – pmr

4

Нет, вы не можете выполнять макрообъемные INSIDE строковые литералы (т. Е. Иметь препроцессор для просмотра внутри литералов для расширения макросов).

У вас может быть расширение макроса для создания строкового литерала, начинающегося с оператора stringify (#). Но это совсем другое дело.

Смежные вопросы