I\'m having a macro like this ( not exactly, but function is quite equivalent):
#define STRUCTMEMBER(Member,Value) GlobalStructInstance. ## Member = Value
..
According to the C Standard, the result of the '##' preprocessing operator must be a 'preprocessing token' or the result is undefined (C99 6.10.3.3(3) - The ## operator).
The list of preprocessing tokens is (C99 6.4(3) - Lexical elements):
header names, identifiers, preprocessing numbers, character constants, string literals, punctuators, and single non-white-space characters that do not lexically match the other preprocessing token categories.
GCC lets you know that you're entering undefined territory. MSVC is silently happy with the undefined result (that is what you'd pretty much expect to happen).
Note that if you're not creating a single token anyway, then you don't need the token pasting operator. Generally (I'm sure there's probably an exception or two), 2 tokens separated by whitespace is equivalent to 2 tokens not separated by whitespace - as in your example.