например, делает:
wchar_t x;
перевести на:
unsigned short x;
например, делает:
wchar_t x;
перевести на:
unsigned short x;
Короче: в C может быть, в C++ нет.
Широко. C определяет wchar_t как typedef, но в Unix это обычно 4 байта (поэтому обычно не короткое), а в Windows 2 оно может быть коротким.
В C++ это уникальный встроенный тип, такой как char
или int
, поэтому вы можете легально перегружать void foo(short x)
и void foo(wchar_t x)
.
Для всех, кто может встретить этот ответ, потому что вызовы функций в вашем проекте Visual Studio не будут связаны, несмотря на то, что обе стороны принимают wchar_t
(или сопоставимый тип, например LPCTSTR
с UNICODE #defined), и когда вы DUMPBIN, библиотека экспортирует функция принимает const unsigned short *
, имейте в виду, что VS позволяет отключить wchar_t
как встроенный тип. Если кто-то изменит это в библиотеке, и вы не нажмете тот же переключатель компилятора в своем проекте, он не будет связан.
Этот параметр можно изменить в разделе «Свойства проекта» > «C/C++/Язык/Рассматривать WChar_t как встроенный тип», его также можно изменить с помощью параметра «/Zc».
Для C wchar_t
является typedef
. Является ли это синонимом для unsigned int
, является ли он вообще беззнаковым типом или имеет размер 4 байта, определяется реализацией.
В C++ wchar_t
— это отдельный встроенный тип. Здесь также его размер и подписанность определяются реализацией.
Стандарт не требует, чтобы wchar_t был беззнаковым. Его также можно подписать. И должен быть другой тип того же размера; но стандарт явно не говорит, что этот другой тип должен быть коротким.
«тот же размер, подписанность и требования к выравниванию, что и у одного из других целочисленных типов, называемых его базовым типом» (C++98 §3.9.1).
В компиляторах C это typedef, обычно определяемый в stddef.h.
sizeof(wchar_t)
== 2 или 4, и это зависит от платформы. Обычно только окна wchar_t
имеют 16 бит.
- person Artyom; 07.03.2010
Нет, это не так. Это переводится как «широкий характер». Делать какие-либо предположения о том, что это оказывается на конкретной платформе, неверно, и в первую очередь противоречит самой цели наличия wchar_t.
Смысл использования абстракции состоит в том, чтобы отделить семантическое значение типа от его основного представления.
Не обязательно; это может быть 4-байтовая величина или любой другой размер, выбранный реализацией.
Это зависит от компилятора.
typedef
.
- person dalle; 07.03.2010
wchar_t
typedef
. Этот тег C
принадлежит вам, а не Марлону. Правильный ответ будет Да для C, но Нет для C++.
- person sbi; 07.03.2010