C++ 这是什么:L“;DLGCTRL“;对话框控件id
我在一些C++11代码中发现了这一点:C++ 这是什么:L“;DLGCTRL“;对话框控件id,c++,string,literals,suffix,C++,String,Literals,Suffix,我在一些C++11代码中发现了这一点: L“DLGCTRL”L#dialog#u control_id 这里的“L”是什么?没有#运算符或串联。 是的,在“L”和“L”之间没有任何内容。怎么允许这样做 我得到一个错误: 错误C3688:无效的文字后缀“L”;未找到文字运算符或文字运算符模板“运算符”“L” 我在Windows 10上安装了Visual Studio 2015和2017。 它通常在C++98或00上编译,我假设这发生在预处理器宏中,否则这个问题毫无意义,例如: #define X(
L“DLGCTRL”L#dialog#u control_id
这里的“L”是什么?没有#运算符或串联。
是的,在“L”和“L”之间没有任何内容。怎么允许这样做
我得到一个错误:
错误C3688:无效的文字后缀“L”;未找到文字运算符或文字运算符模板“运算符”“L”
我在Windows 10上安装了Visual Studio 2015和2017。
它通常在C++98或00上编译,我假设这发生在预处理器宏中,否则这个问题毫无意义,例如:
#define X(dialog_control_id) L"DLGCTRL_"L#dialog_control_id
其中X(foo)
扩展为L“DLGCTRL\u foo”
代码应为: 原始代码中有几个问题:
-
在ISO C++中,不允许代码> L<< /C> >,它是微软预处理器的扩展,以产生宽字符串文字。
- 在C++11预处理器中,直接在结束引号后面的字母(中间没有空格)被标记为用户定义的字符串文字
- 最后一个
无论如何都不是必需的,因为宽字符串文字可以与窄字符串文字连接(生成宽字符串文字)L
L
也是什么。显然,MSFT的一部分是“MSP”的拥抱、扩展、消灭策略。@ J.DOE,第一个代码<代码>代码>是标准C++的一部分,它意味着字符串文字是L#
是Microsoft的扩展
#define X(dialog_control_id) L"DLGCTRL_" #dialog_control_id