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 untouchable
macro, but every attempt we have made to alter the first
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:
//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;
}
We are compiling in Windows under VisualStudio.