Defining both _UNICODE and _MBCS may cause problems if you use "tchar.h". For example many people use the _T macro and the "_t" string functions so the same code can be used for Unicode and non-Unicode builds. Take the _tcscmp function for example. Here's a table from the documentation for this function:
TCHAR.H routine
_UNICODE & MBCS not defined
_MBCS defined
_UNICODE defined
---------------------------------------------------------------------------
_tcscmp
strcmp
_mbscmp
wcscmp
As you can see the results are not specified if both are defined. Already defining both leaves you in the reals of undocumented behaviour. In this case, with my header files, the Unicode version will be used. However, It's never a good idea to reply on undocumented behaviour in computer programming if you don't have a compelling reason. In general, I remove the _MBCS.
Steve