Frage

Ich bin in dem Prozess des Lernens C ++ und stieß auf einen Artikel auf der MSDN hier:

http://msdn.microsoft.com/en-us/magazine/ dd861344.aspx

Im ersten Codebeispiel die eine Codezeile, die meine Frage bezieht, ist die folgende:

VERIFY(SetWindowText(L"Direct2D Sample"));

Genauer gesagt, dass L-Präfix. Ich hatte ein wenig lesen, und korrigieren Sie mich, wenn ich falsch bin :-), aber dies ist für Unicode-Strings zu ermöglichen, das heißt für einen langen Zeichensatz prep. Jetzt während meiner lesen Sie auf dieser stieß ich auf einen anderen Artikel auf Adavnced String-Techniken in C hier http : //www.flipcode.com/archives/Advanced_String_Techniques_in_C-Part_I_Unicode.shtml

Es sagt, dass es ein paar Optionen, einschließlich der Einbeziehung des Headers ist:

#define UNICODE 

oder

#define _UNICODE

in C, Punkt wieder heraus, wenn ich falsch bin, schätzt Ihr Feedback. Weiterhin zeigt es den Datentyp für diese Unicode-Strings zu sein:

wchar_t

Es wirft in die ein Makro mischen und eine Art Hybrid-Datentyp, das Makro Wesen:

_TEXT(t)

, die einfach die Zeichenfolge mit der L-Präfixen und den Hybrid-Datentyp wie

TCHAR 

Was es für Unicode erlaubt es weist darauf hin, wenn der Header ist und ASCII, wenn nicht. Nun meine Frage ist, oder eher ein Asumption, die ich bestätigen möchte, würde Microsoft verwendet diesen TCHAR Datentyp, die flexibler ist oder gibt es keinen Vorteil zu begehen, um die wchar_t verwenden.

Auch wenn ich sage, hat Microsoft diese, insbesondere für exmaple in der ATL und WTL Bibliotheken, tut jemand von euch haben Vorlieben oder einige Ratschläge bezüglich diesem?

Cheers,

Andrew

War es hilfreich?

Lösung

Für alle neuen Software sollten Sie UNICODE definieren und wchar_t direkt verwenden. ANSI stirngs Mit kommen wieder zu Ihnen zu verfolgen.

Sie sollten nur verwenden wchar_t und die breiten Versionen aller CRT-Funktionen (zB: wcscmp statt strcmp). Die Textmakros und TCHAR usw. existieren nur, wenn Ihr Code Anforderungen an die Arbeit in beiden ANSI und UNICODE-Umgebungen, die ich Code fühlen selten tun muss.

Wenn Sie eine neue Windows-Anwendung erstellen mithilfe von Visual Studio UNICODE automatisch definiert und wchar_t wird wie ein eingebautes in Arbeit.

Andere Tipps

Kurze Antwort: die Hybrid-Infrastruktur mit dem TCHAR Typ, der _TEXT() Makro und die verschiedenen Funktionen _t* (_tcscpy in den Sinn kommt) sind eine Reminiszenz an die Zeiten, in denen Microsoft hatte zwei Plattformen koexistieren:

  1. Die Linie Windows NT wurde auf der Unicode-String-Darstellung basiert
  2. Die Windows 95/98 / ME Linie auf ANSI String-Darstellung basiert.

String-Darstellung hier bedeutet, dass alle Windows-APIs, dass erwartet oder zurückgegebene Zeichenfolge in Ihrer App verwendet eine oder die andere Darstellung für diese Saiten. COM hinzugefügt noch mehr Verwirrung, da es auf beiden Plattformen verfügbar ist - und erwartete Unicode-Strings auf beide

!

In den alten Zeiten war es ermutigend, dass Sie „portable“ Code schreiben: Sie können die Hybrid-Infrastruktur für die Saiten zu verwenden, wurden angewiesen, so dass Sie nur für beide Modelle zusammenstellen kann durch die Definition / undefining UNICODE und / oder _UNICODE für Ihre App .

Da die Windows9x Linie nicht mehr relevant ist (für die überwiegende Mehrheit der Anwendungen sowieso) Sie können sicher die ANSI-Welt ignorieren und die Unicode-Strings direkt verwenden.

Beachten Sie jedoch, dass Unicode mehrere Darstellungen heute hat: wie es über der Unicode-Konvention von wchar_t implizierten darauf hingewiesen wird, ist die UCS-2-Darstellung (alle codierten Zeichen in 16-Bit-Worten). Es gibt noch andere, weit verbreitete Darstellungen, wo dies nicht unbedingt der Fall ist.

Unter Windows es ist wchar_t mit UTF-16 (2 Byte) Codierung.

Quelle: http://www.firstobject.com /wchar_t-string-on-linux-osx-windows.htm

TCHAR ändert seine Art, je nachdem ob UNICODE definiert ist, und sollte verwendet werden, wenn Sie Code möchten, dass Sie sich für UNICODE und Nicht-UNICODE zusammenstellen können.

Wenn Sie mögen explizit UNICODE Prozess nur Daten, dann zum Einsatz Wchar_t frei fühlen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top