Я знаю, что:
#define foo 4
#define str(s) #s
с str(foo)
выписывает: "foo"
, потому что stringify выполняется сначала из расширения текста, но это:
#define xstr(s) str(s)
#define str(s) #s
#define foo 4
с xstr(foo)
выписывает: "4"
.
Почему? Каковы шаги, участвующие в этом процессе?