По крайней мере некоторые препроцессоры 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?
Если да, то как C99 гарантирует это?
Если нет, то в какой момент поведение переходит от C-определенного к GCC-определенному?