I was wondering if there was any practical difference between WCHAR and wchar_t.
Well, one practical difference would be that WCHAR
doesn't exist on my platform. For Windows only (and with no intention of ever porting the program to another platform) and with the necessary headers included, it's the same (since WCHAR
is just a typedef
).
Practically speaking there isn't much difference. They both represent the same underlying type. A 2 byte width value.
LibT will be on shortly to give you the real insane differences between the various platforms an the C++ standard :)
wchar_t is a distinct type, defined by the C++ standard.
WCHAR is nonstandard, and as far as I know, exists only on Windows. However, it is simply a typedef (or possibly a macro) for wchar_t, so it makes no practical difference.
Older versions of MSVC did not have wchar_t as a first-class type, instead of was simply a typedef for short
Most likely, they introduced WCHAR to represent "wide character type" across any compiler version, whether or not wchar_t exists as a native type.
You should use wchar_t in your code though. That's what it's for.
Anybody knows how old is WCHAR? I would imagine it dates to at least Windows NT 3.1. I'd speculate that when Microsoft started using WCHAR in the Windows headers, wchar_t was not defined in either the C or C++ standard. Please correct me if I'm wrong.
Microsoft is in the unenviable position of having to support declarations and headers that a) must work in either C and C++ ; b) compile under very different architectures (i86, MIPS, PowerPC, Alpha, ...) and c) must be backwards-compatible with source code written for 15+ year old compilers. Plus, any breaking changes and thousands of books, reference manuals, online documentation, etc published over the last two decades would suddenly become WRONG.
It's an interface; once it became published it's written in stone; even if it's not needed for new code.