打印
[STM8]

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

[复制链接]
1151|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 | 只看该作者
没有任何提示,加括号也不行.

使用特权

评论回复
5
Messi1999| | 2016-7-11 13:00 | 只看该作者
优先级的问题吗?优化了?

使用特权

评论回复
6
zyz7|  楼主 | 2016-7-14 01:40 | 只看该作者
不是优先级问题,反正
if((~a)==b)
{...;}
竟然没有编译,完全透明。

使用特权

评论回复
7
jnyyygch| | 2016-7-15 21:19 | 只看该作者
因为该if语句永远为假,编译器直接忽视,至于为什么永远为假,百度一下有关整型提升的知识

使用特权

评论回复
8
NE5532| | 2016-7-15 21:31 | 只看该作者
同楼上,楼主应该先怀疑是不是自己语句有问题,if是没有执行,还是执行结果为真。

使用特权

评论回复
9
skygz| | 2016-7-16 20:02 | 只看该作者
if( IR_data == ~IR_DataShit)  这样试试行不?

使用特权

评论回复
10
笨蛋第一| | 2019-3-13 12:11 | 只看该作者
我也遇到了,请问您解决了,只不过我把取反加了括号,也不可以,直接跳过

使用特权

评论回复
11
zhouzpd| | 2019-6-28 10:56 | 只看该作者
我用STVD测试和IAR是一样的结果呢

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

最终做的是数学 运算。

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


如果是C51,那么就会计算

使用特权

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

本版积分规则

251

主题

268

帖子

0

粉丝