奇思妙想 · 2024年 4月 14日 0

为什么中文字符串会报出错误"C2001: 常量中有换行符"?

141 次浏览

如果是用VS,一种很大的可能是VS没有正确识别源代码编码格式,比如是UTF-8格式,no BOM. VS没有发现UTF-8或UTF-16的BOM头,会默认按ANSI编码(中文操作系统默认是GB2312)解析源代码,包括源代码中的字符串,即将UTF-8格式的字符串字节用GB2312来解析,自然可能会产生问题。

即使在VS的设置中增加额外选项"/utf-8"依然不能编译通过(VS2022 17.0.4, 这与微软官方文档的说法不一致),不过可以在命令行中加/utf-8消除问题,例如cl /utf-8 demo.c, 怀疑这是VS的一个bug.