找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4291|回复: 2
上一主题 下一主题
收起左侧

KEIL编程软件中,void函数中的return使用问题,求师傅们解答

[复制链接]
跳转到指定楼层
楼主
ID:479916 发表于 2019-3-28 19:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     我在用keil u4写单片机程序的时候,遇到如下情况(只贴了整个程序的一部分):
//串口发送函数
void UartDriver()
{        
        if(flagFrame)
        {
                flagFrame=0;
                UartReceive();
                if(buf[0]!=0x01)                    //地址不相符,直接跳出,buf[0]字节代表地址                        
                {
                        return;
                }
                switch(buf[1])
                {
                        case 0x12:PowSta=buf[1];break;
                        case 0x13:PowSta=buf[1];break;
                        default:break;
                }
        
                ScanKey();
                KeyCode();
                UartSend();                                                               
        }
}

如果程序写成上述形式,用串口助手调试,对从机发0x01+数据,2个字节,程序不能对外发送数据(程序为从机程序),但是如下改下如下:
//串口发送函数
void UartDriver()
{        
        if(flagFrame)
        {
                flagFrame=0;
                UartReceive();
                if(buf[0]==0x01)                    //地址不相符,直接跳出,buf[0]字节代表地址                        
                {        
                     switch(buf[1])
                    {
                        case 0x12:PowSta=buf[1];break;
                        case 0x13:PowSta=buf[1];break;
                        default:break;
                    }
                }
                ScanKey();
                KeyCode();
                UartSend();                                                               
        }
}

采用同样的方法,则可以对外发出数据,搞不明白为什么,求哪位大侠能给解答一下,十分感谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:416287 发表于 2019-3-28 20:49 | 只看该作者
return:rereturn的刚猛程度大于break,它使程序直接跳出整个函数,即函数遇到它后就停止一切执行了。后面的程序就执行不了,你可以去看一下return break continue的区别。
回复

使用道具 举报

板凳
ID:479916 发表于 2019-3-29 07:52 | 只看该作者
奋斗的小白熊 发表于 2019-3-28 20:49
return:rereturn的刚猛程度大于break,它使程序直接跳出整个函数,即函数遇到它后就停止一切执行了。后面 ...

在上述含有return的程序中,如果return执行的话,应该是跳出整个UartDriver函数,是吗?这正是我想达到的目的.
回复

使用道具 举报

地板
ID:365802 发表于 2019-3-29 09:57
看帖子的同时自己也学习.
continue: 结束本次循环. 无参数
break:      结束本层循环, 可加参数(层数), 默认1, 如果为2, 则表示跳出两层循环.
return:    结束本方法(函数), 可加参数, 参数即为函数返回值.


资料来自: https://www.cnblogs.com/yangdabao/p/6172210.html

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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