Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这是什么:L“;DLGCTRL“;对话框控件id_C++_String_Literals_Suffix - Fatal编程技术网

C++ 这是什么:L“;DLGCTRL“;对话框控件id

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(

我在一些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(dialog_control_id)  L"DLGCTRL_"L#dialog_control_id
其中
X(foo)
扩展为
L“DLGCTRL\u foo”


代码应为:

原始代码中有几个问题:

    在ISO C++中,不允许代码> L<< /C> >,它是微软预处理器的扩展,以产生宽字符串文字。
  • 在C++11预处理器中,直接在结束引号后面的字母(中间没有空格)被标记为用户定义的字符串文字
  • 最后一个
    L
    无论如何都不是必需的,因为宽字符串文字可以与窄字符串文字连接(生成宽字符串文字)

请发表一篇文章,解释“在C++98或00上正常编译”是什么意思“.C++98是一种语言标准,而不是一种编译器。我想知道这个
L
也是什么。显然,MSFT的一部分是“MSP”的拥抱、扩展、消灭策略。@ J.DOE,第一个代码<代码>代码>是标准C++的一部分,它意味着字符串文字是 const WCARGYTT < /COD>的数组。组合
L#
是Microsoft的扩展
#define X(dialog_control_id)  L"DLGCTRL_" #dialog_control_id