使用宽字符常量铿锵获取“的宽字符常量多余的字符忽略”错误(Using Wide Character

2019-11-04 03:19发布

最近,我决定改用从GCC到铛,我让我的使用宽字符常量以下警告:“在忽略宽字符常量多余的字符”。 下面是得到警告的代码:

wstring& line;
…
for (wstring::iterator ch = line.begin(); ch != line.end(); ++ch)
    switch (*ch) {
        case L'│': *ch = L'|'; break;
        case L'﹤': *ch = L'<'; break;
        case L'﹥': *ch = L'>'; break;
        case L'﹙': *ch = L'('; break;
        case L'﹚': *ch = L')'; break;
        default: break;
    }

这里,在情况条件的所有字符都高Unicode字符,并因此被视为由铛解析器多字节字符,显然(源代码是UTF-8编码)。

我的问题是什么是警告信息背后的意义。 也就是说,恰恰是被忽略的。 此外,由于此警告,将我的工作方案的设计?

GCC没有给出此代码的任何警告,一切工作就像一个魅力。

Answer 1:

在程序的心脏是源文件的解释。 你知道这是UTF-8编码。 这就是为什么6个字节L'﹤'是被解释为4个Unicode字符。 但是,如何将铛知道吗? 它把6个字节,并假定一个8位编码。 因此,它认为L'xyz' (精确字符依赖于假定8位字符集)。 铛告诉你,它是解释L'xyz'作为L'x' ,忽略y和z。 这是极不可能按预期工作。



文章来源: Using Wide Character Constants with clang Gets “extraneous characters in wide character constant ignored” Error