简体   繁体   中英

What is the difference between 'WCHAR' and 'wchar_t'?

WCHARwchar_t之间有什么实际区别吗?

wchar_t is a distinct type, defined by the C++ standard.

WCHAR is non standard, 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.

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 ).

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.

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

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 :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM