3

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

 2 years ago
source link: https://www.v2ex.com/t/818321
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

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

  amiwrong123 · 8 小时 8 分钟前 · 1071 次点击

环境:Windows 上使用 vs

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

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

  • 源文件本身的编码格式
  • /source-charset
  • /execution-charset

我理解一下,就是:

  • 源文件里面的二进制,是根据源文件本身的编码格式来存的。
  • 比如\x45\xAB 这两个字节存在源码文件的某个位置上,然后根据source-charset的那种编码格式进行映射,把 \x45\xAB(文件中的存储的字节) <===> 字符 a ,
  • 然后,根据execution-charset的那种编码方式进行映射,字符 a <===> 某几个字节(内存中的存储的字节) ,因为最终你这个字符串要保存到内存中,所以现在就确定下来内存中这个字符串到底存储的哪几个字节。

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

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

  • 正常情况只有一个人写代码的话,应该让这三个因素保持为 什么?
  • 现在我集成别人的 c++代码,他的文件编码格式全是 gb2312 (里面还有中文字符串常量),弄得我有点难搞。

第 1 条附言  ·  5 小时 10 分钟前

所以,为了让源文件在 Windows 的 vs 上编译 和 linux 上编译,源文件格式到底该用 utf-8 还是 utf-8-withBom 呢?😂

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK