title: error: pasting "." and "red" does not give a valid preprocessing token
body: <p>I'm implementing The X macro, but I have a problem with a simple macro expansion. This macro (see below) is used into several macros usage examples, by including in <a href="http://www.cprogramming.com/tutorial/cpreprocessor.html"><code>this</code></a> article.
   The compiler gives an error message, but I can see valid C code by using <code>-E</code> flag with the GCC compiler.</p>
  
  <p>The macro X-list is defined as the following:</p>
  
  <pre><code>#define LIST \
    X(red, "red") \
    X(blue, "blue") \
    X(yellow, "yellow")
  </code></pre>
  
  <p>And then:</p>
  
  <pre><code>#define X(a, b) foo.##a = -1;
    LIST;
  #undef X
  </code></pre>
  
  <p>But the gcc given the following errors messages:</p>
  
  <pre><code>lixo.c:42:1: error: pasting "." and "red" does not give a valid preprocessing token
  lixo.c:42:1: error: pasting "." and "blue" does not give a valid preprocessing token
  lixo.c:42:1: error: pasting "." and "yellow" does not give a valid preprocessing token
  </code></pre>
  
  <p>Like I said, I can seen valid C code by using <code>-E</code> switch on gcc:</p>
  
  <pre><code>lixo.c:42:1: error: pasting "." and "red" does not give a valid preprocessing token
  lixo.c:42:1: error: pasting "." and "blue" does not give a valid preprocessing token
  lixo.c:42:1: error: pasting "." and "yellow" does not give a valid preprocessing token
    foo.red = -1; foo.blue = -1; foo.yellow = -1;;
  </code></pre>
  
  <p>What's a valid preprocessing token? Can someone explain this?</p>
  
  <p>(before you say "why not just an either initialize or <code>memset()</code>?" it's not my real code.)</p>