В чем разница между "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 и т.д. для обоих