Is there any practical difference between WCHAR
and wchar_t
?
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 :)
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
).
typedef wchar_t WCHAR; // wc, 16-bit UNICODE character
this is defined in winnt.h.So originally it is wchar_t WCHAR is abbrivation to it .You can used wcscat,wcslen etc. functions for both
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 it was simply a typedef
for short
Most likely, Microsoft introduced WCHAR
to represent a "wide character type" across any compiler version, whether or not wchar_t
existed as a native type.
You should use wchar_t
in your code though. That's what it's for.
Does anybody know how old WCHAR
is? 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.
WCHAR
is an interface—once it became published it was written in stone, even if it's not needed for new code.