打印
[STM8]

编译会出现”truncating assignment“ 警告

[复制链接]
8185|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gmgmgm|  楼主 | 2014-5-17 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gmgmgm 于 2014-5-19 21:43 编辑

unsigned char bw;

bw=bw+2;
bw=bw>>1;

上面两句在STVP+COSMIC 中编译都会出现”truncating assignment“ 警告
要怎样改才不会出现 ”truncating assignment“ 警告
也就是  使用这类语句都会   如  变量=变量+常数    变量=变量-常数   变量=变量*常数    变量=变量/常数
都会出现 “truncating assignment”警告

网上看了贴子 但没有人回答具体要怎样


终于搞明白,多谢楼下的几位淫兄 ,散分结贴了;
上面在使用8位变量操作前,都应该强制声明变量为8 位才不会出现警告,看了些资料得知是因STVD编译器默认是16位变量。或许这是C语言的标准

上面改为下面后语句编译全通过,由于我是刚接触STM8,有点菜了,希望大家多指点
unsigned char bw;

bw=(unsigned char ) ( bw+2);
bw=( unsigned char ) ( bw>>1 );

就连涵数参数是8位的变量,都应这样增加类型强制
write24c02 ( 0x00 ,  ( unsigned char  )  ( bw+1 )  );

格式为:( unsigned char )(表达式);如是16位的变量则不需要这样声明,
沙发
dirtwillfly| | 2014-5-17 10:00 | 只看该作者
本帖最后由 dirtwillfly 于 2014-5-17 10:03 编辑

看这篇:https://bbs.21ic.com/icview-180565-1-1.html

使用特权

评论回复
板凳
mmuuss586| | 2014-5-17 10:04 | 只看该作者
bw=bw>>1;
改成bw=bw/2 ;看下,和编译器有关吧;

使用特权

评论回复
地板
airwill| | 2014-5-17 13:19 | 只看该作者
赋值截断的警告, 好象一般的编译器没有这个警告的.
可能是 16 位结果赋值给了 8 位变量, 或者 32 位赋值给了 16 位或 8 位变量, 强制转换成 8位或 16 位后再赋值, 试试是不是就解决了?

使用特权

评论回复
5
gmgmgm|  楼主 | 2014-5-19 21:33 | 只看该作者
airwill 发表于 2014-5-17 13:19
赋值截断的警告, 好象一般的编译器没有这个警告的.
可能是 16 位结果赋值给了 8 位变量, 或者 32 位赋值给 ...

终于搞定,冒似很少人关注STM8,因为这STVD 警告提示是隐藏 在Project Sdtings >C Compiler  默认是Display errors only 设置,需要设置 为Display Errors&Warning 设置才会出警告提示;现在终于搞明白它为什么在8位变量操作时会提示截断警告,需要在8位变量前增加(unsigned char)类似于强制类型声明才不会有这样的警告出现,我直接在主题上修改了,给大家参考

使用特权

评论回复
6
gmgmgm|  楼主 | 2014-5-19 22:06 | 只看该作者
mmuuss586 发表于 2014-5-17 10:04
bw=bw>>1;
改成bw=bw/2 ;看下,和编译器有关吧;

谢谢,已经搞明白了,我把能正确编译的语句修改好贴出来了

使用特权

评论回复
7
叶与秋风舞| | 2016-3-17 20:34 | 只看该作者

使用特权

评论回复
8
769854714| | 2016-8-1 14:21 | 只看该作者
谢谢分享了,一直没让STVD报警告,最近才打开,发现好多警告。其中之一就是楼上的,加了强制转换就好了

使用特权

评论回复
9
qxZHOU123| | 2017-4-19 16:14 | 只看该作者
嗯 有道理

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

766

帖子

2

粉丝