Существует ли какая-либо практическая разница между WCHAR
и wchar_t
?
В чем разница между "WCHAR" и "wchar_t"?
Ответ 1
Ну, одна практическая разница заключалась бы в том, что WCHAR
не существует на моей платформе. Только для Windows (и без намерения перенести программу на другую платформу) и с включенными заголовками она одинаковая (поскольку WCHAR
- это просто typedef
).
Ответ 2
wchar_t
- это отдельный тип, определенный стандартом С++.
WCHAR
нестандартен, и, насколько я знаю, существует только в Windows. Тем не менее, это просто typedef
(или, возможно, макрос) для wchar_t
, поэтому он не имеет практических различий.
В старых версиях MSVC не было wchar_t
как первоклассного типа, вместо этого это было просто typedef
для short
Скорее всего, Microsoft представила WCHAR
для представления "широкого символьного типа" в любой версии компилятора, независимо от того, существует или нет wchar_t
как родной тип.
Вы должны использовать wchar_t
в своем коде. Это для чего.
Ответ 3
Кто-нибудь знает, сколько лет WCHAR
? Я бы предположил, что это датируется, по крайней мере, Windows NT 3.1. Я бы предположил, что, когда Microsoft начала использовать WCHAR
в заголовках Windows, wchar_t
не был определен ни в стандарте C, ни в С++. Пожалуйста, поправьте меня, если я ошибаюсь.
Microsoft находится в незавидном положении, чтобы поддерживать объявления и заголовки, которые: а) должны работать либо на C и С++; b) скомпилировать под очень разными архитектурами (i86, MIPS, PowerPC, Alpha,...) и c) должны быть обратно совместимы с исходным кодом, написанным для компиляторов старше 15 лет. Кроме того, любые нарушения и тысячи книг, справочных руководств, онлайн-документации и т.д., Опубликованных за последние два десятилетия, внезапно станут НЕПРАВИЛЬНЫМИ.
WCHAR
- интерфейс - как только он стал опубликованным, он был написан на камне, даже если он не нужен для нового кода.
Ответ 4
Практически говоря, нет большой разницы. Оба они представляют один и тот же базовый тип. Значение ширины 2 байта.
LibT скоро появится, чтобы дать вам настоящие безумные различия между различными платформами и стандартом С++:)
Ответ 5
typedef wchar_t WCHAR;//wc, 16-разрядный символ UNICODE
это определено в winnt.h.So изначально это wchar_t WCHAR - это аббревиатура к нему. Вы можете использовать wcscat, wcslen и т.д. для обоих