title: c preprocessor passing multiple arguments as one
body: <p>The C preprocessor is passing multiple arguments as if they were a single argument. I feel pretty sure the problem is how we are calling the <code>untouchable</code> macro, but every attempt we have made to alter the <code>first</code> macro has failed to produce the desired result. Here is a complete code sample with comments that explain what happens and what we want to happen:</p>
  
  <pre><code>//this can be changed, but it must remain a #define to be of any use to us
  #define first a,b,c
  
  // v all code below this line cannot be altered (it's outside of our control)
  
  #define untouchable(name, c1, c2, c3) \
      wchar_t name[] = \
      { \
          quote(c1), \
          quote(c2), \
          quote(c3) \
      }
  
  #define quote(c) L#@c
  
  // ^ all code above this line cannot be altered (it's outside of our control)
  
  int _tmain(int argc, _TCHAR* argv[])
  {
      static untouchable(mrNess, first);
  
      // the line above is precompiled to:
      // static wchar_t mrNess[] = { L'a,b,c', L, L };
  
      // whereas we want:
      // static wchar_t mrNess[] = { L'a', L'b', L'c' };
  
      return 0;
  }
  </code></pre>
  
  <p>We are compiling in Windows under VisualStudio.</p>