Как именно работает трюк с двумя строками?

По крайней мере, некоторыеC Препроцессоры позволяют вам структурировать значение макроса, а не его имя, передавая его через один функциональный макрос другому, который его структурирует:

#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */

Примеры использованияВот.

Это работает, по крайней мере, в GCC и Clang (оба с-std=c99), но я не уверенкак это работает в терминах C-стандарта.

Это поведение гарантировано C99?
Если да, то как С99 это гарантирует?
Если нет, то в какой момент поведение переходит от C-определенного к GCC-определенному?

Ответы на вопрос(2)

Ваш ответ на вопрос