出现中文符号时,编译错误信息显示啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了出现中文符号时,编译错误信息显示啥相关的知识,希望对你有一定的参考价值。

Copyright © 1999-2020, CSDN.NET, All Rights Reserved



打开APP



System_sleep
关注
VS2019代码中包含中文内容导致的编译错误和打印输出乱码问题 原创
2022-06-25 17:45:47
 2点赞

System_sleep 

码龄11年

关注
前言
在VS2019中,如果代码中包含中文字符串定义或注释,会导致各种莫名其妙的编译错误,就算是运气好,编译没有报错,也会遇到控制台打印中文乱码的问题,让人倍感烦躁。

编译问题
1. 代码中定义了中文字符串常量导致编译错误:“常量中有换行符“ ;
2. 代码中包含中文注释导致编译错误:找不到XXX (宏、变量)、XXX不是常量/变量及由于找不到声明导致的其他问题;

打印乱码问题
代码打印中文字符串,在命令提示符输出是乱码;

解决方法,三种方法任选其一:
一. 修改代码文件格式为utf-8带签名,让MSVC编译器能够自动识别并以utf-8 BOM格式加载文件:

使用外部编辑器将代码文件保存为utf8-BOM格式;
或 打开代码文件,在VS2019 “高级保存选项” 中将代码文件保存格式选择为“Unicode-带签名“;

二. 修改代码格式:

修改中文字符串、中文注释的格式,在中文结尾处添加英文空格,让MSVC编译器能够以GBK编码方式加载编译中文utf-8编码字符串,可以解决编译报错问题,打印还是乱码;

三. 强制指定MSVC编译器加载代码文件的编码格式:

在VS2019“项目”-“工程属性”对话框-“C/C++”-“所有选项"子页,在“附加选项”内添加 “/utf-8” (等同于”/source-charset:utf-8 /execution-charset:utf-8");
在VS2019“项目”-“工程属性”对话框-“C/C++”-"所有选项"子页,在“附加选项”内添加 “/source-charset:utf-8 /execution-charset:gbk” (前者表示文件本身的编码,后者表示编译以后的字符数组内的字节是什么编码);

总结:
1. 如果是新建工程,推荐方法一,让所有新建代码文件都统一为utf-8 BOM 格式;
2. 如果是跨平台代码,且文件包含少量中文注释,可以尝试方法二;
3. 如果是已有的历史复杂工程(非使用工具导出的解决方案),可以尝试方法三, 但需要注意设置execution-charset时,要同时考虑到UI显示和打印二者对字符串编码的要求(可能不一致);
参考技术A 出现问题描述,问题是出在将AS的strings文件里的英文翻译成汉语之后出现,其中,使用的百度翻译词文,复制的时候带有中文的“”双引号。

Failed to compile values file.
1
1
解决方法:
将中文的“”双引号替换为英文的""双引号即可。
有中文符号的话,程序编译不通过。
要多加谨慎。
参考技术B 今天发现一个中文标点符号的编译错误,从报错信息上看,没看出什么有价值的提示,不容易看出来是中文符号的原因哈。

error: stray '\357' in program

error: stray '\274' in program

error: stray '\233' in program
参考技术C 从报错信息上看,没看出什么有价值的提示,不容易看出来是中文符号的原因哈。

error: stray '\357' in program

error: stray '\274' in program

error: stray '\233' in program

以上是关于出现中文符号时,编译错误信息显示啥的主要内容,如果未能解决你的问题,请参考以下文章

在Android环境下编译调用c++出现以下错误,大神们这是啥原因呀??我已经配置NDK了。

在 PL/SQL 中编译包时出错。错误(7,1):PLS-00103:遇到符号“CREATE”

WebAssembly 编译器错误:使用外部库编译时未定义符号

编译器错误信息: CS1056: 意外的字符的处理办法

符号表和抽象语法树是啥关系?两者在编译器设计中是不是必需

java 运行错误