title: Macro stringifies a previous macros identifier instead of its replacement
body: <p>Why is <code>inner_LOAD_ATOM(buffer, ATOM_MAX)</code> converted to <code>scanf("%" "ATOM_MAX" "s", x)</code> but the wrapped version isnt? I would expect ATOM_MAX(identifier) to be replaced by 10 before it is "passed" to <code>inner_LOAD_ATOM</code> or <code>LOAD_LINE</code> and making the wrapper useless. More elaborated answer why the wrapper is necessary would be very appreciated.</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  
  #define ATOM_MAX 10
  #define inner_LOAD_ATOM(x, y) scanf("%" #y "s", x)      /* inner part */
  #define LOAD_ATOM(x, y) inner_LOAD_ATOM(x, y)           /* wrapper of inner_LOAD_ATOM */
  
  
  int main(void)
  {
      char buffer[ATOM_MAX] = {0, };
  
      /* wrapped works fine */
      LOAD_ATOM(buffer, ATOM_MAX);        
  
      /* [Warning] unknown conversion
      type character 'A' in format [-Wformat=] */
      inner_LOAD_ATOM(buffer, ATOM_MAX);
  
      printf("%s\n", buffer);
  
  
      return 0;
  }
  </code></pre>