[STM8] stm8s 用IAR编程,请问这个语句为何被忽略而不是出错。

[复制链接]
1484|10
 楼主| zyz7 发表于 2016-7-6 23:34 | 显示全部楼层 |阅读模式
unsigned char IR_DataShit;
unsigned char IR_data;
if(~IR_DataShit== IR_data)
{...;}
以上的语句是红外解码部分,在KEIL和义隆EUIDE及STVD均能编译执行,但在IAR中,却被忽略跳过,也不提示出错,为什么,但改为以下就可以了
unsigned char IR_DataShit;
unsigned char IR_data;
unsigned char IR_T;
IR_T =~IR_DataShit;                                      
if(IR_T == IR_data)
{...;}

难道IAR如此不好用吗?
if(~IR_DataShit== IR_data)这个格式,用IAR编,最简单的程式也不通过。
bobo5650 发表于 2016-7-7 09:18 | 显示全部楼层
应该有warning的,看看warning的提示呗。
xiaofei558008 发表于 2016-7-7 09:36 | 显示全部楼层
加个括号试试看if((~IR_DataShit)== IR_data)
 楼主| zyz7 发表于 2016-7-9 21:09 来自手机 | 显示全部楼层
没有任何提示,加括号也不行.
Messi1999 发表于 2016-7-11 13:00 | 显示全部楼层
优先级的问题吗?优化了?
 楼主| zyz7 发表于 2016-7-14 01:40 | 显示全部楼层
不是优先级问题,反正
if((~a)==b)
{...;}
竟然没有编译,完全透明。
jnyyygch 发表于 2016-7-15 21:19 来自手机 | 显示全部楼层
因为该if语句永远为假,编译器直接忽视,至于为什么永远为假,百度一下有关整型提升的知识
NE5532 发表于 2016-7-15 21:31 | 显示全部楼层
同楼上,楼主应该先怀疑是不是自己语句有问题,if是没有执行,还是执行结果为真。
skygz 发表于 2016-7-16 20:02 | 显示全部楼层
if( IR_data == ~IR_DataShit)  这样试试行不?
笨蛋第一 发表于 2019-3-13 12:11 来自手机 | 显示全部楼层
我也遇到了,请问您解决了,只不过我把取反加了括号,也不可以,直接跳过
zhouzpd 发表于 2019-6-28 10:56 | 显示全部楼层
我用STVD测试和IAR是一样的结果呢

~IR_DataShit 是有符号数,并且自动提升为寄存器宽度

最终做的是数学 运算。

if((U08)~IR_DataShit== IR_data)那么才会按数字运算


如果是C51,那么就会计算
您需要登录后才可以回帖 登录 | 注册

本版积分规则

251

主题

268

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部