c preprocessor passing multiple arguments as one
<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>