Stringification - ¿Cómo funciona?

Yo sé eso:

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

constr(foo) escribe:"foo", porque stringify se ejecuta primero de expansión de texto, pero esto:

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

conxstr(foo) escribe:"4".

¿Por qué? ¿Cuáles son los pasos involucrados en el proceso?

Respuestas a la pregunta(2)

Su respuesta a la pregunta