как определить макрос для преобразования объединенной строки char в строку wchar_t в C

Подобно макросу _T()в Visual Studio, я определил и использовал свой собственный макрос _Lкак:

#define _L(x)  __L(x)
#define __L(x) L ## x

It работает для:

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не работает как escape-последовательность новой строки.\nстановится двумя символами, а вывод wprintf:

"abc\n""def\n"

Как я могу иметь макрос для преобразования двух связанных строк символов в wchar_t? Проблема в том, что у меня есть несколько уже существующих макросов:

#define BAR  "The fist line\n" \
             "The second line\n"

Я хочу скрыть их в строку wcharво время компиляции. Компилятором является ICC в Windows.

Изменить :
Макрос _Lработает в gcc, MSVC и ICC не работают, это ошибка компилятора. Спасибо @R.., чтобы прокомментировать меня.

6
задан Eitan T 24 May 2012 в 11:46
поделиться