vs 中如何解决 C++的“常量中有换行符”

2021-11-27 11:19:47 +08:00
 amiwrong123

环境:Windows 上使用 vs

总是遇到那种定义一个中文字符串std::string = "你好";(不一定是这段中文),然后 vs 就编译报错“常量中有换行符”。

我看了网上的文章,大概意思就是会收到这三个的影响:

我理解一下,就是:

不知道我上面的流程理解对不对?(我觉得流程理解清楚,这个问题也就好解决了)

而且想再问一下,解决“常量中有换行符”的最佳方案:

3920 次点击
所在节点    程序员
28 条回复
nightwitch
2021-11-27 16:41:08 +08:00
全部用 utf-8 with bom,msvc 开 /utf-8 的标志。
远离 wchar 那一坨
ipwx
2021-11-27 16:53:30 +08:00
所以其实 Qt 的标准解决方案挺香。源代码都是英文,但用 tr(...) 函数包起来。这个函数负责在运行时根据语言包资源文件查表。。。这样就可以做到源代码没有多字节字符了,哪里都不会出问题。
ipwx
2021-11-27 16:53:53 +08:00
另外 QString 内存中是 UTF-16 。。。总之就挺香。
lonewolfakela
2021-11-27 17:26:40 +08:00
vs 的话,给编译器加 /utf-8 参数,然后所有源文件用 utf8 without bom 存,再在项目根目录加一个.editorconfig 文件,里面写上

[*.{c,cpp,cc,cxx,h,hpp,ixx}]
charset = utf-8

这样比较好。
3dwelcome
2021-11-27 18:07:02 +08:00
我也遇到楼主这种中文编码问题,只在某些特定平台,特定版本 clang 编译出问题。

gcc 和 vc 倒是一点问题都没有。

最后也没找到很直接的解决办法,写了一个源代码预处理工具,实时转换 utf8 编码。
ysc3839
2021-11-27 18:34:27 +08:00
我个人目前是编译参数加上 /utf-8 ,然后源代码全都用 UTF-8 without BOM 存,同时在 manifest 里面声明 active codepage 为 UTF-8 ( https://docs.microsoft.com/en-us/windows/apps/design/globalizing/use-utf8-code-page ),代码中优先使用 UTF-16 。

@ipwx Qt 的那个字符串我感觉有点尴尬,默认情况下它是 UTF-8 的字符串字面量,运行时要分配新内存解码为 UTF-16 ,如果想直接存成静态 UTF-16 ,需要包个宏,很影响代码观感。
whi147
2021-11-28 10:47:25 +08:00
我的操作是包一层翻译器,从外部读取字符串。代码内部都是同一编码
macha
2021-11-30 09:27:30 +08:00
@amiwrong123 因为他在源码里面写了中文字符,我这边都强制大家写英文注释。vs 对中文支持不太好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/818321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX