title: Suppress C Macro Variable Substitution
body: <p>I have this bit of code (part of an interpreter for a garbage-collected Forth system, actually):</p>
  
  <pre><code>#define PRIMITIVE(name) \
      do \
      { \
          VocabEntry* entry = (VocabEntry*)gc_alloc(sizeof(VocabEntry)); \
          entry-&gt;code = name; \
          entry-&gt;name = cstr_to_pstr(#name); \
          entry-&gt;prev = latest_vocab_entry; \
          latest_vocab_entry = entry; \
      } \ 
      while (false)
  
  PRIMITIVE(dup);
  PRIMITIVE(drop);
  PRIMITIVE(swap);
  // and a lot more
  </code></pre>
  
  <p>but there's a problem: in the line</p>
  
  <pre><code>entry-&gt;name = cstr_to_pstr(#name);
  </code></pre>
  
  <p>the <code>name</code> field is substituted for <code>dup</code>, <code>drop</code>, <code>swap</code>, and the rest. I want the field name to not be substituted.</p>
  
  <p>So, is there any way to solve this, other than simply renaming the macro argument?</p>
  
  <p><strong>For an answer, please explain if there is, in general, a way to suppress the substitution of a macro argument name in the macro body. Don't answer "just do it this way" (please).</strong></p>