我已经在某些C ++ _ 11代码中找到了它:
L"DLGCTRL_"L#dialog_control_id
什么是“ L#”?没有#运算符或串联。 是的,“和L之间没有任何东西。这怎么允许?
我得到了错误:
错误C3688:字面后缀'L'无效;找不到文字运算符或文字运算符模板'运算符“” L“
我在Windows 10上拥有Visual Studio 2015和2017。 它可以在C ++ 98或00上正常编译
答案 0 :(得分: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预处理程序的扩展,用于生成宽字符串文字。L
从来没有必要,因为可以将宽字符串文字与窄字符串文字连接起来(产生宽字符串文字)