keil警告warning: #870-D处理办法

KEIL中代码里包含汉字报错: warning: #870-D

本文解释一下870-D告警的来源及如何处理。

1.如何让keil支持中文?

keil的菜单栏edit->configuration配置里面就可以选择编码格式,里面有ANSI,UTF-8,GB2312等格式,一般常用的就这提到的三种,都是支持中文的编码格式。

2.为什么别的代码拷贝过来是乱码?

那是因为别人的代码在编写保存的时候使用的编码格式和你当前keil的编码格式不一致,比如他用GB2312写的代码,你拷贝到你这里是UTF-8,如果不转换,直接贴过来或者直接打开他的文件,就会乱码。
可以做如下测试:先设置KEIL为GB2312编码格式,然后敲一段代码,注释用中文,或者用printf函数,打印中文字符串。保存,再切换到UTF-8,就会变成乱码。

/**
* @brief 中文乱码测试
*/
#include "stdio.h"

int main(void){
	printf("我测试下乱码!\r\n"); //测试中文乱码
	return 0;
}

3.如何解决别人的代码乱码问题?

用工具,可以在CSDN资源搜【GB-UTF8编码格式-批量转换工具】,把源码文件夹拖进去,格式筛选先输入.h转换,再输入.c转换。好像不支持同时两种格式。转换完成后再用keil打开,同时把keil编码格式设置为目标格式就行了。一般来说大部分都是从GB转为UTF-8。

4.为什么转完了编译要报warning:#870-D?

那是因为全角字符和半角字符混用导致的,另外就是keil原生对包含中文的代码支持就不好,有一些把汉字内容删掉后重新输入一遍就不报了,有一些要删掉中英文混用的英文字母或数字或半角符号就可以,同样的代码,同一个keil环境,前后编译输出结果可能不同(有时候报有时候不报),说明keil本身功能有一定的BUG。比如下面这个代码:

printf("汉字测试123English\r\n");

如果是文件直接转过来的,一开始报870,删掉123,可能就不报了。加上123又报,然后把整个全部删掉重新挨个输入一次,就对了。
我自己测试的结果大致是这样(不是绝对靠谱,有些字符不一定适用):汉字后面跟全角半角英文数字都行,但全角字符后面不能跟数字和半角字符。

printf("汉字。");//可以
printf("汉字123.");//可以
printf("汉字.123");//可以
printf("汉字。ABC123");//可以

printf("汉字。123");//不行,句号是全角字符,后面不能跟数字
printf("汉字。!123");//不行,但是把英文感叹号换成@是可以的,不知道为什么!!!!

有兴趣的可以自己测试下。
【更新】汉字包括全角字符总数必须为偶数!这个应该是真的,KEIL有可能在对齐上有要求。

5.如何让keil不报warning#870-D?

源文件里加#pragma diag_suppress 870。让keil屏蔽掉这个类型的warning输出。
包含汉字的源码不多的情况下建议挨个去排查一遍,重整代码,多的话就直接屏蔽拉倒。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值