Wie _T()
Makro in Visual Studio auf wchar_t, I definiert und verwendet meine eigene _L
Makro wie:wie Makro definieren verketteten char Zeichenfolge zu konvertieren Zeichenfolge in C
wprintf(_L("abc\n"));
:
#define _L(x) __L(x)
#define __L(x) L ## x
Es ist für Arbeiten
Aber bekommt einen Kompilierungsfehler für:
wprintf(_L("abc\n""def\n"));
Es berichtet "Zeichenfolgenliterale mit verschiedenen Zeichenarten können nicht verkettet werden".
Ich habe auch:
#define _L2(x) __L2(x)
#define __L2(x) L ## #x
wprintf(_L2("abc\n""def\n"));
Der Code kompiliert wird, aber die \n
als Escape-Sequenz einer neuen Linie nicht funktioniert. Die \n
wird zwei Zeichen, und der Ausgang des wprintf
ist:
"abc \ n" "def \ n"
Wie ich ein Makro zwei bis wchar_t
verketteten char Zeichenfolge zu konvertieren haben kann? Das Problem ist, ich habe einige bereits bestehende Makros:
#define BAR "The fist line\n" \
"The second line\n"
Ich möchte, dass sie zu einer wchar
Zeichenfolge während der Kompilierung verdeckte. Der Compiler ist ICC in Windows.
bearbeiten:
Die _L
Makro funktioniert in gcc, die MSVC und ICC nicht funktioniert hat, es ist ein Compiler-Fehler. Danke @R .. um mich zu kommentieren.
Wenn ich mich richtig erinnere, müssen Sie nicht Makro schreiben. Platzieren Sie die Saite einfach nebeneinander und sie werden automatisch in eine kombiniert. Zumindest funktioniert das für gcc. – nhahtdh
Dies ist ein reiner Fehler in MSVC. Die C-Sprachen ermöglichen das Verketten von Strings unterschiedlicher Breite, und das Ergebnis ist eine breite Zeichenfolge. –
@nhahtdh Ich bin nicht zwei Saiten concat. Ich möchte die kontaktierte Zeichenfolge in wchar konvertieren. – RolandXu