OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3934|回复: 13

编译总是有告警,可是每种分支我都加返回值了呀,为什么还会报告警

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-9-6
在线时间
4 小时
发表于 2019-9-11 10:35:49 | 显示全部楼层 |阅读模式
1金钱
微信截图_20190911103456.png

最佳答案

查看完整内容[请看2#楼]

我知道你说的啥意思了 这样改 就没有告警了而且也不改变我逻辑 if(KEY0==0||KEY1 ==0||KEY2==0||KEY_UP ==1 ) { delay_ms(10); if(KEY0 == 0) return 1; else if(KEY1 == 0) return 2; else if(KEY2 == 0) return 3; else if(KEY_UP == 1) return 4; else return 5; } else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY_UP ==0) { return 0; } else return 5; ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-9-6
在线时间
4 小时
 楼主| 发表于 2019-9-11 10:35:50 | 显示全部楼层
rendar 发表于 2019-9-12 17:24
我猜你在return 4 下面加一行else return 0试试。

我知道你说的啥意思了  这样改 就没有告警了而且也不改变我逻辑
        if(KEY0==0||KEY1 ==0||KEY2==0||KEY_UP ==1 )
        {               
                delay_ms(10);                                                       
       
                if(KEY0 == 0)
                        return 1;
                else if(KEY1 == 0)
                        return 2;
                else if(KEY2 == 0)
                        return 3;
                else if(KEY_UP == 1)
                        return 4;
                else
                        return 5;
        }
        else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY_UP ==0)
        {
                return 0;
        }       
        else
                return 5;
}
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10568
金钱
10568
注册时间
2017-2-18
在线时间
1913 小时
发表于 2019-9-11 17:20:24 | 显示全部楼层
报啥警告?
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-9-6
在线时间
4 小时
 楼主| 发表于 2019-9-12 09:44:23 | 显示全部楼层

..\HARDWARE\KEY\key.c(64): warning:  #940-D: missing return statement at end of non-void function "Key_Scanf"
回复

使用道具 举报

8

主题

185

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-7-15
在线时间
47 小时
发表于 2019-9-12 11:27:11 | 显示全部楼层
表示Key_Scanf丢失返回值,你这个函数没问题,看看你头文件的定义是什么?
回复

使用道具 举报

8

主题

185

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-7-15
在线时间
47 小时
发表于 2019-9-12 11:30:32 | 显示全部楼层
另外按键消抖不是你这样弄的。。。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-9-4
在线时间
9 小时
发表于 2019-9-12 17:24:51 | 显示全部楼层
我猜你在return 4 下面加一行else return 0试试。  
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-9-4
在线时间
9 小时
发表于 2019-9-12 17:26:58 | 显示全部楼层
rendar 发表于 2019-9-12 17:24
我猜你在return 4 下面加一行else return 0试试。

我想是因为你的语句中不包含多个按键同时按下的情况导致的。我猜= =对了告诉我一声,不对就等大佬,我也才刚学= =
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-9-12 17:35:37 | 显示全部楼层
第一个if 里面的if没有else 可能return不出来  这样的函数最后最好最后加个return
回复

使用道具 举报

10

主题

161

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2019-9-5
在线时间
134 小时
发表于 2019-9-15 22:06:59 | 显示全部楼层
sdd23 发表于 2019-9-12 09:44
..\HARDWARE\KEY\key.c(64): warning:  #940-D: missing return statement at end of non-void function  ...

你的函数是需要返回的类型,int是不需要返回类型的,你把u8换成void试试
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2019-9-16 08:44:22 | 显示全部楼层
最后一行添加一个return 0;
虽然逻辑上不会执行到,但编译器检测规则与执行规则有时是不一样的.
你现在函数所以的return 是有条件下的,
假设把函数内的代码全部注释掉,那么函数就没有返回值,这个函数写法就不完整了
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-9-6
在线时间
4 小时
 楼主| 发表于 2019-9-16 10:22:41 | 显示全部楼层
五月爸爸 发表于 2019-9-12 11:30
另外按键消抖不是你这样弄的。。。

对 可能我这有问题 这已经改了   谢谢啦 正好我C51的程序中也存在同样的问题  修改中
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-9-6
在线时间
4 小时
 楼主| 发表于 2019-9-16 10:34:24 | 显示全部楼层
五月爸爸 发表于 2019-9-12 11:27
表示Key_Scanf丢失返回值,你这个函数没问题,看看你头文件的定义是什么?

是分支没有返回值
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-9-6
在线时间
4 小时
 楼主| 发表于 2019-9-16 10:38:41 | 显示全部楼层
rendar 发表于 2019-9-12 17:26
我想是因为你的语句中不包含多个按键同时按下的情况导致的。我猜= =对了告诉我一声,不对就等大佬,我也 ...

你说的反向是对的   已修改。我还有个C51的项目 按键也没包含按下的多种情况 我还在考虑怎么修改呢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-16 11:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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