我在一些 C++_11 代码中发现了这一点:
L"DLGCTRL_"L#dialog_control_id
这里的“L#”是什么?没有 # 运算符或串联。 是的,“和 L 之间没有任何东西。这怎么可能?
我收到错误:
error C3688: invalid literal suffix 'L'; literal operator or literal operator template 'operator ""L' not found
我在 Windows 10 上安装了 Visual Studio 2015 和 2017。 它在 C++98 或 00 上正常编译
最佳答案
我假设这发生在预处理器宏内部,否则这个问题根本没有意义,例如:
#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
无论如何都不是必需的,因为宽字符串文字可以与窄字符串文字连接(生成宽字符串文字)
关于c++ - 这是什么: L"DLGCTRL_"L#dialog_control_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53860644/