OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 634|回复: 4

KEIL中写了一条语句一直有警告,大家看看是怎么回事?

[复制链接]

  离线 

7

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-5-6
在线时间
13 小时
发表于 2017-12-25 13:56:16 | 显示全部楼层 |阅读模式
1金钱
KEIL5中,写了这条语句,编译后一直报警,我感觉不到哪里出了问题?难道是编译器版本的问题么?
while(!(rev = DET_TUBE_STATUS_YING(&tmp_05_TUBE, &tmp_10_TUBE)));       //报警的语句
函数声明:u8 DET_TUBE_STATUS_YING(u8* num_05, u8* num_10);
u8 rev = 0;
目前看,变量都是对的。我本意是这个函数DET_TUBE_STATUS_YING()返回0,一直执行;返回非零数,执行随后的语句。可是,还需要纪录返回值。
我知道,在C语言中,赋值表达式的值为左值的值。我的理解有偏差么?还是怎么了?
..\..\BSP\bsp_use.c(261): warning:  #1293-D: assignment in condition
          while(!(rev = DET_TUBE_STATUS_YING(&tmp_05_TUBE, &tmp_10_TUBE)));

问了度娘:出现这样的问题代码是可以继续正常执行的,但是写法不太严谨,因为在while/if的条件中,系统期望的是一个布尔类型的值,当表达式传递的结果非布尔值类型时,就会出现这样的警告。
可我,不是逻辑取反了么,怎么还不是bool类型。大家帮我看下,分析分析。谢了


最佳答案

回复

使用道具 举报

  离线 

0

主题

188

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2017-5-27
在线时间
84 小时
发表于 2017-12-25 13:56:17 | 显示全部楼层
do{} while();
回复

使用道具 举报

  离线 

505

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
131631
金钱
131631
注册时间
2010-12-1
在线时间
1211 小时
发表于 2017-12-26 01:10:16 | 显示全部楼层
把语句拆分为多句,就知道原因了
回复

使用道具 举报

  离线 

7

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-5-6
在线时间
13 小时
 楼主| 发表于 2017-12-27 10:51:32 | 显示全部楼层

我就是这么解决的,只是想知道,问题到底出在哪里?不过,感觉这个问题不好回答呀!谢谢了
回复

使用道具 举报

  离线 

5

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-3-30
在线时间
9 小时
发表于 2018-2-9 09:35:07 | 显示全部楼层
正点原子公众号
rev == ……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

必看:"原子哥”力荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-8-21 17:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */