gpt4 book ai didi

c++ - gcc 和 clang 预处理器不理解 L 前缀

转载 作者:搜寻专家 更新时间:2023-10-31 00:11:18 24 4
gpt4 key购买 nike

假设这段代码:

enum class Foo
{
One,
Two,
Three,
Four,
Five
};

#define HANDLE_FOO(f) case Foo::f: std::wcout << L#f << std::endl;
Foo x = Foo::Five;
switch (x)
{
HANDLE_FOO(One);
HANDLE_FOO(Two);
HANDLE_FOO(Three);
HANDLE_FOO(Four);
HANDLE_FOO(Five);
}

msvc 编译正确,但 gcc 报错:“‘L’未在此范围内声明”

所以,问题是:我该如何解决这个问题?不仅'L'前缀不起作用,而且'u'等也不起作用。

不过,这段代码编译得很好:

std::wstring str = L"This is a string";

提前谢谢你。

最佳答案

我认为构造无效,MSVC 应该对其进行诊断。

# 运算符将其参数“字符串化”,因此 One 变为 "One" -- 但在它前面加上 L 你有两个单独的标记,L“One”

您需要的是单个标记,即字符串文字 L"One"。您需要使用 ## 标记粘贴运算符以及 # 字符串化运算符:

#define HANDLE_FOO(f) case Foo::f: std::wcout << L ## #f << std::endl;

实验表明这适用于 g++ 5.3.0 和 clang++ 3.6。

关于c++ - gcc 和 clang 预处理器不理解 L 前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com