title: Stringification - how does it work?
body: <p>I know that:</p>
  
  <pre><code>#define foo 4  
  #define str(s) #s
  </code></pre>
  
  <p>with <code>str(foo)</code> writes out: <code>"foo"</code>, because stringify is executed first of text expansion, but this:</p>
  
  <pre><code> #define xstr(s) str(s)
   #define str(s) #s
   #define foo 4
  </code></pre>
  
  <p>with <code>xstr(foo)</code> writes out: <code>"4"</code>.</p>
  
  <p>Why? What are the steps involved in the process?</p>