I think concatenation of literal strings, in the compiler, was added to C89 (the previous C standard). It was originally meant to help with very long string literals:
char str[] = "abcdefghijklmnopqrstuvwxyz"
"abcdefghijklmnopqrstuvwxyz"
"abcdefghijklmnopqrstuvwxyz";
rather than the older style, which could cause some problems ("what about the spaces at the beginning of line 2 and 3 - are they part of the string or not?"):
char str[] = "abcdefghijklmnopqrstuvwxyz\
abcdefghijklmnopqrstuvwxyz\
abcdefghijklmnopqrstuvwxyz";
I can't point to a description of this at the moment, but some C FAQ site should contain something about this.
The C standard tries to be a bit broader than what's used by Windows, so they are talking about "multibyte" strings and "wide character" strings (hence names like mbstowcs - "multibyte-string-to-wide-character-string"). I'm not an expert, but AFAIK, there are other character encodings than ASCII, ANSI and Unicode. Maybe nor used by Windows, but probably used by C implementations on other platforms.
In straight C, you use "string" for a character string, and L"string" for a wide character string - in Windows this means Unicode. To be able to quickly build either ANSI or Unicode applications, Windows have a macro TEXT("something") which translates to either L"something", if UNICODE is defined (#define UNICODE), or "something" if it's not.
To complicate things even further, both Microsoft and Pelles C contains TCHAR.H which uses the same approach, but the macro is _T("something") and the symbol is called _UNCODE.
Hope this made *something* clearer...
Pelle