Stringificação - como funciona?

Eu sei disso:

#define foo 4  
#define str(s) #s

comstr(foo) escreve:"foo", porque stringify é executado primeiro de expansão de texto, mas isso:

 #define xstr(s) str(s)
 #define str(s) #s
 #define foo 4

comxstr(foo) escreve:"4".

Por quê? Quais são as etapas envolvidas no processo?

questionAnswers(2)

yourAnswerToTheQuestion