单片机C语言中如何从子程序1某一行跳转到子程序2某一行?

这样怎么错了:voidstate1(void){语句。。。;gotoend;}voidstate2(void){end:语句。。。}... 这样怎么错了:
void state1(void)
{
语句。。。;
goto end;
}
void state2(void)
{
end:语句。。。
}
展开
 我来答
潘达lya
推荐于2017-09-10 · TA获得超过1476个赞
知道小有建树答主
回答量:509
采纳率:0%
帮助的人:444万
展开全部
C语言有一个叫做setjmp.h的标准库提供了两个函数,可以进行跨函数跳转,不过C51支持不支持就不清楚了。。。如果你想这么做,可以混用汇编,使用JMP指令,不过不建议在子函数之间跳转,有可能会出错,JMP是没有现成保护的纯跳转,你应该注意你程序碰见ret指令返回时的位置。。。
最简单的一个事就是比如函数1的返回值是个2字节的数,函数2的返回值是个4字节的数,当你从第一个子程序跳到第二个,其实主函数是没有调用函数2,当函数2返回时,他会认为函数返回值仍然是2字节,这个时候就出错了,不同的函数的参数表也是不同的,这也一样会导致程序出错。。。所以这种跳转只是蹩脚适合无参数无返回值的纯过程。。。。
l521088816
2013-02-16 · TA获得超过1772个赞
知道小有建树答主
回答量:780
采纳率:0%
帮助的人:1061万
展开全部
goto语句只能用到同一个函数中,不能跳函数的
不只是在单片机上,我在电脑上都不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
592611058
2013-02-17
知道答主
回答量:13
采纳率:0%
帮助的人:1.1万
展开全部
有提到了奥地利一点点,虽然并不
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式