Ist wchar_t nur eine Typdefinition von unsigned short?

Lesezeit: 2 Minuten

Benutzer-Avatar
Marlon

macht zum Beispiel:

wchar_t x;

übersetzen ins:

unsigned short x;

  • Marlon, die Antwort hängt davon ab, ob Sie nach C oder C++ fragen. Möchten Sie eines davon oder beides wissen?

    – sbi

    7. März 2010 um 8:37 Uhr

Kurz gesagt: In C darf es in C++ keine sein.

Weit. C definiert wchar_t als typedef, aber in Unix sind es im Allgemeinen 4 Bytes (also im Allgemeinen nicht kurz) und in Windows 2 kann es kurz sein.

Unter C++ ist es ein einzigartiger eingebauter Typ wie char oder intdamit Sie legal überladen können void foo(short x) und void foo(wchar_t x)

Benutzer-Avatar
Tim Keating

Für alle anderen, die möglicherweise auf diese Antwort stoßen, da Funktionsaufrufe in Ihrem Visual Studio-Projekt nicht verknüpft werden, obwohl beide Parteien annehmen wchar_t (oder ein vergleichbarer Typ, wie z LPCTSTR mit UNICODE #definiert), und wenn Sie DUMPBIN der Bibliothek exportieren, übernimmt die Funktion const unsigned short *beachten Sie, dass Sie mit VS abschalten können wchar_t als Einbautyp. Wenn jemand dies in einer Bibliothek ändert und Sie in Ihrem Projekt nicht denselben Compiler-Schalter drücken, wird es nicht verknüpft.

Diese Option kann unter “Project Properties>C/C++/Language/Treat WChar_t as Builtin Type” geändert werden, sie kann auch über die Option “/Zc” geändert werden.

Für C, wchar_t ist ein typedef. Ob es sich um ein Synonym für unsigned intob es sich überhaupt um einen vorzeichenlosen Typ handelt oder ob es sich um 4 Bytes handelt, ist implementierungsdefiniert.

In C++, wchar_t ist ein eigenständiger eingebauter Typ. Auch hier ist seine Größe und Vorzeichenhaftigkeit implementierungsdefiniert.

wchar_t muss laut Standard nicht unsigniert sein. Es kann auch unterschrieben werden. Und es muss eine andere Sorte der gleichen Größe geben; aber der Standard sagt nicht ausdrücklich, dass dieser andere Typ kurz sein muss.

“die gleichen Größen-, Vorzeichen- und Ausrichtungsanforderungen wie einer der anderen ganzzahligen Typen, der als zugrunde liegender Typ bezeichnet wird” (C++98 §3.9.1).

In C-Compilern ist dies ein Typedef, normalerweise in stddef.h definiert

Nein, tut es nicht. Es bedeutet „ein breiter Charakter“. Machen Sie keine Vermutungen darüber, was das ist ist zufälligerweise auf einer bestimmten Plattform ist falsch und besiegt die ganzen Zweck überhaupt einen wchar_t zu haben.

Der Zweck der Verwendung einer Abstraktion besteht darin, die semantische Bedeutung des Typs von seiner zugrunde liegenden Darstellung zu trennen.

Benutzer-Avatar
Jonathan Leffler

Nicht unbedingt; es könnte eine 4-Byte-Menge sein oder tatsächlich jede andere von der Implementierung gewählte Größe.

Es kommt auf den Compiler an.

1255770cookie-checkIst wchar_t nur eine Typdefinition von unsigned short?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy