Frage

Sie müssen meine Unwissenheit vergeben, aber ich bin es nicht gewohnt, breite Zeichensätze in C ++ zu verwenden, aber gibt es eine Möglichkeit, weite Streichliterale in C ++ zu verwenden, ohne ein L vor jedes wörtliche Literal zu stellen?

Wenn das so ist, wie?

War es hilfreich?

Lösung

Nein, das gibt es nicht. Sie müssen das L -Präfix (oder ein Makro wie _t () mit VC ++ verwenden, das bei kompiliertem Unicode sowieso auf L erweitert wird).

Andere Tipps

Der neue C ++ 0x -Standard definiert eine andere Möglichkeit, dies zu tun:
http://en.wikipedia.org/wiki/c%2b%2b0x#new_string_literals

in einem verwandten Hinweis .. ich versuche Folgendes zu tun

#define  get_switch( m )   myclass::getSwitch(L##m)

Das ist ein Makro, das wird erweitert

get_switch(isrunning)

hinein

myclass::getswitch(L"isrunning")

Dies funktioniert gut in C ++ Visualstudio 2008

Wenn ich jedoch denselben Code unter Mac Xcode (für iPhone) kompiliere, erhalte ich den Fehler:

error: 'L' was not defined in this scope.

Bearbeiten: Lösung

#define  get_switch( m )   myclass::getSwitch(L ## #m)

Dies funktioniert sowohl auf VC ++ als auch auf Mac Xcode (GCC)

Warum möchten Sie String -Literale nicht mit einem L präfixen? Es ist recht einfach - Saiten ohne L sind Ansi Strings (const char*), Saiten mit einem l sind breite Zeichenketten (const wchar_t*). Dort ist der TEXT() Makro, das eine Saitenliteral zu einem ANSI oder einer Breitcharakter-Zeichenfolge abhängig vom aktuellen Projekt einsetzt, wird für die Verwendung von Uncodes eingestellt:


#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif

Es gibt auch die _T() Makro, was gleichbedeutend mit TEXT().

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