Что это такое: L & quot; DLGCTRL_ & lt; L # dialog_control_id

Я нашел это в некотором коде C ++ _ 11:

L"DLGCTRL_"L#dialog_control_id

Что такое «L #» здесь? Там нет оператора # или конкатенации так.
Да, между «и Л.» ничего нет. Как это можно допустить?

Я получаю ошибку:

ошибка C3688: неверный литеральный суффикс ‘L’; литеральный оператор или шаблон буквального оператора ‘operator «» L’ не найден

У меня Visual Studio 2015 и 2017 на Windows 10.
Обычно компилируется на C ++ 98 или 00

2

Решение

Я предполагаю, что это происходит внутри макроса препроцессора, иначе вопрос вообще не имеет смысла, например:

#define X(dialog_control_id)  L"DLGCTRL_"L#dialog_control_id

где предполагается, что X(foo) расширяется до L"DLGCTRL_foo",


Код должен быть:

#define X(dialog_control_id)  L"DLGCTRL_" #dialog_control_id

В исходном коде есть несколько проблем:

  • L# не допускается в ISO C ++, это расширение препроцессора Microsoft для создания широкого строкового литерала.
  • В препроцессоре C ++ 11 буква непосредственно после закрывающей кавычки (без пробелов между ними) маркируется как пользовательский строковый литерал.
  • Последний L в любом случае никогда не было необходимости, потому что широкий строковый литерал может быть соединен с узким строковым литералом (производя широкий строковый литерал)
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]