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

[复制链接]
1263|25
 楼主| zhanghqi 发表于 2021-5-9 19:50 | 显示全部楼层 |阅读模式

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)
{...;}
lizye 发表于 2021-5-9 19:52 | 显示全部楼层
难道IAR如此不好用吗?
 楼主| zhanghqi 发表于 2021-5-9 19:56 | 显示全部楼层
if(~IR_DataShit== IR_data)这个格式,用IAR编,最简单的程式也不通过。
huangchui 发表于 2021-5-9 19:58 | 显示全部楼层
应该有warning的,看看warning的提示呗。
 楼主| zhanghqi 发表于 2021-5-9 20:01 | 显示全部楼层
加个括号试试看if((~IR_DataShit)== IR_data)
 楼主| zhanghqi 发表于 2021-5-9 20:03 | 显示全部楼层
没有任何提示,加括号也不行.
yszong 发表于 2021-5-9 20:05 | 显示全部楼层
优先级的问题吗?优化了?
 楼主| zhanghqi 发表于 2021-5-9 20:07 | 显示全部楼层
不是优先级问题,反正
if((~a)==b)
{...;}
竟然没有编译,完全透明。
zchong 发表于 2021-5-9 20:09 | 显示全部楼层
忽略跳过是啥意思?优先级搞不清的情况下尽量用括号。
pengf 发表于 2021-5-9 20:10 | 显示全部楼层
因为该if语句永远为假,编译器直接忽视
supernan 发表于 2021-5-9 20:12 | 显示全部楼层
至于为什么永远为假,百度一下有关整型提升的知识
wyjie 发表于 2021-5-9 20:13 | 显示全部楼层
同楼上,楼主应该先怀疑是不是自己语句有问题,if是没有执行,还是执行结果为真。
shimx 发表于 2021-5-9 20:15 | 显示全部楼层
if( IR_data == ~IR_DataShit)  这样试试行不?
wuhany 发表于 2021-5-9 20:22 | 显示全部楼层
只不过我把取反加了括号,也不可以,直接跳过
liliang9554 发表于 2021-5-9 20:25 | 显示全部楼层
我用STVD测试和IAR是一样的结果呢
 楼主| zhanghqi 发表于 2021-5-9 20:27 | 显示全部楼层
~IR_DataShit 是有符号数,并且自动提升为寄存器宽度
jlyuan 发表于 2021-5-9 20:29 | 显示全部楼层
最终做的是数学 运算。
chuxh 发表于 2021-5-9 20:32 | 显示全部楼层
if((U08)~IR_DataShit== IR_data)那么才会按数字运算
happy_10 发表于 2021-5-9 20:33 | 显示全部楼层
如果是C51,那么就会计算
 楼主| zhanghqi 发表于 2021-5-9 20:36 | 显示全部楼层

唉,还是没有什么结果,算了,多谢大家啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

852

主题

11757

帖子

5

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