除非文档有签名/字节顺序标记,否则为什么无法编译?

问题描述 投票:0回答:1

如果我在 Visual Studio 中启动一个新项目并编写以下内容(顺便说一句,这是来自 github 存储库):

#include <cstdint>
static bool is_unicode_Lo_char(uint32_t c) {
    // open a hole for carrot
    if (c == U'🥕') return true;
}

int main()
{


}

此文件中的某些 Unicode 字符无法保存在当前 代码页。您是否想将此文件重新保存为 Unicode 以便 维护您的数据吗?

如果我点击“否”,我会收到编译器错误:

“常量字符过多”

在胡萝卜所在的线上。

所以我用编码保存文档:

Unicode (UTF-8 without signature) - Codepage - 65001.

我仍然收到错误,同样的错误。

然后我保存文档:

Unicode (UTF-8 with signature) - Codepage - 65001.

然后编译。不同之处在于它将 EF BB BF 添加到文件的开头。然后它编译得很好。我想知道这是为什么。如果没有人能够识别它是 UTF-8,那么将文档保存为 UTF-8 且没有签名意味着什么?你怎么能识别UTF-8呢?当然,如果有任何字节设置了 MSB,则肯定不会,因为 ASCII/ANSI 确实存在 127 个以上的值。我必须用字节顺序标记保存吗?通常鼓励使用字节顺序标记进行保存吗?

c++ visual-studio
1个回答
0
投票

如果源文件没有 BOM,MSVC 需要 /utf-8 编译器开关。

参见类似的线程:“错误 C2015:常量中的字符太多”对于 char32_t 文字

© www.soinside.com 2019 - 2024. All rights reserved.