打印
[DSP编程]

使用switch case语句总是提示unreachable?

[复制链接]
3970|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Ethan_SYSU|  楼主 | 2014-7-30 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下函数:
Uint8 uniforn_pattern(Uint8 n)
{
        switch(n)
        {
        case 0:return 0;break;
        case 1:return 1;break;
        case 2:return 2;break;
        case 3:return 3;break;
……
        default:return 58;
       }
}
除了default以外,上面的都提示说statement is unreachable= =
可是我在VS上用C写这段程序也没出现问题啊,请问是什么原因?应该怎么修改?

相关帖子

沙发
kim5257| | 2014-7-30 17:32 | 只看该作者
return了还break吗?
按照你的意思,可以尝试定义一个变量flag,case 0时flag=0;break,这样子

使用特权

评论回复
板凳
匿名  2014-7-30 18:05
如果用了 return; 就不用 break;

使用特权

评论回复
地板
zhangmangui| | 2014-7-30 23:11 | 只看该作者
3楼说的用了return了就不用break   有待验证   
如果出问题  也就出到return 0上了
还有需要注意CCS中对应控制器的数据类型
Uint8是那种数据类型     case一直到了多少

使用特权

评论回复
5
Ethan_SYSU|  楼主 | 2014-7-31 01:19 | 只看该作者
zhangmangui 发表于 2014-7-30 23:11
3楼说的用了return了就不用break   有待验证   
如果出问题  也就出到return 0上了
还有需要注意CCS中对应 ...

unsigned char,最大到255

使用特权

评论回复
6
Ethan_SYSU|  楼主 | 2014-7-31 01:23 | 只看该作者
kim5257 发表于 2014-7-30 17:32
return了还break吗?
按照你的意思,可以尝试定义一个变量flag,case 0时flag=0;break,这样子 ...

懂了,提示说的unreachable应该说的是break这条语句,前面的case语句都是OK的,所以把break都去掉后就没有这样的warning了,或者像你所说用个变量FLAG。

使用特权

评论回复
7
NWPU_CHEN| | 2014-7-31 10:12 | 只看该作者
Ethan_SYSU 发表于 2014-7-31 01:23
懂了,提示说的unreachable应该说的是break这条语句,前面的case语句都是OK的,所以把break都去掉后就没 ...

建议你以后写程序,对于这种有返回值的子函数,只用一个return放到程序末尾,推荐使用在里边定义一个Pattern模式变量,switch分支后给Pattern赋值,最后末尾一句return Pattern;即可,我来放个马后**,那种警告其实没啥事,完全不影响你的执行,vs不警告完全是编译器的敏感度不同,因为break根本不会执行,从程序严谨性的方面考虑警告也需要解决,return本来就是跳出被调用子函数回到主函数执行的作用(不过他可以附带一个返回值),所以break只是多此一举!

使用特权

评论回复
8
zhangmangui| | 2014-7-31 21:43 | 只看该作者
Ethan_SYSU 发表于 2014-7-31 01:23
懂了,提示说的unreachable应该说的是break这条语句,前面的case语句都是OK的,所以把break都去掉后就没 ...

break去了肯定是不行的     符合条件后的每个case都会被执行

使用特权

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

本版积分规则

6

主题

13

帖子

0

粉丝