Как и макрос _T()
в Visual Studio, я определил и использовал свой собственный макрос _L
следующим образом:
#define _L(x) __L(x)
#define __L(x) L ## x
Это работает для:
wprintf(_L("abc\n"));
Но получает ошибку компиляции для:
wprintf(_L("abc\n""def\n"));
Он сообщает «Строковые литералы с символами разных типов не могут быть объединены».
Я также сделал:
#define _L2(x) __L2(x)
#define __L2(x) L ## #x
wprintf(_L2("abc\n""def\n"));
Код компилируется, но \n
не работает как управляющая последовательность новой строки. \n
становится двумя символами, а вывод wprintf
:
"abc\n""определение\n"
Как я могу иметь макрос для преобразования двух связанных строк символов в wchar_t
? Проблема в том, что у меня есть несколько уже существующих макросов:
#define BAR "The fist line\n" \
"The second line\n"
Я хочу преобразовать их в строку wchar
во время компиляции. Компилятор ICC в Windows.
Изменить:
Макрос _L
работает в gcc, MSVC и ICC не работают, это ошибка компилятора. Спасибо @R.., чтобы прокомментировать меня.
L""
— это стандартный канонический способ преобразования в широкую строку. - person R.. GitHub STOP HELPING ICE   schedule 24.05.2012