title: How to concatenate, evaluate and stringify macros?
body: <p>I am trying to stringify the substitution (evaluation) of a macro concatenation. For example:</p>
  
  <pre class="lang-c prettyprint-override"><code>#include &lt;stdio.h&gt;
  
  #define FOO_ONE 12
  #define FOO_TWO 34
  #define BAR_ONE 56
  #define BAR_TWO 78
  
  #define MAKE_MAC(mac) // ... what to do here?
  
  void main(int argc, char *argv[])
  {
      printf("FOO: " MAKE_MAC(FOO) "\n");
      printf("BAR: " MAKE_MAC(BAR) "\n");
  }
  </code></pre>
  
  <p>The result I am seeking is:</p>
  
  <pre><code>FOO: 1234
  BAR: 5678
  </code></pre>
  
  <p>I tried a few forms, I think the best attempt is this:</p>
  
  <pre class="lang-c prettyprint-override"><code>#define STRINGIFY(mac) #mac
  #define CONCAT(mac1, mac2) STRINGIFY(mac1 ## mac2)
  #define MAKE_MAC(mac) CONCAT(mac, _ONE) CONCAT(mac, _TWO)
  </code></pre>
  
  <p>But, it only gets me this far:</p>
  
  <pre><code>FOO: FOO_ONEFOO_TWO
  BAR: BAR_ONEBAR_TWO
  </code></pre>
  
  <p>So, how can I add the extra step of evaluation of the resulting concatenated macro, before it gets stringified?</p>