单片机C语言中如何从子程序1某一行跳转到子程序2某一行?
这样怎么错了:voidstate1(void){语句。。。;gotoend;}voidstate2(void){end:语句。。。}...
这样怎么错了:
void state1(void)
{
语句。。。;
goto end;
}
void state2(void)
{
end:语句。。。
} 展开
void state1(void)
{
语句。。。;
goto end;
}
void state2(void)
{
end:语句。。。
} 展开
展开全部
C语言有一个叫做setjmp.h的标准库提供了两个函数,可以进行跨函数跳转,不过C51支持不支持就不清楚了。。。如果你想这么做,可以混用汇编,使用JMP指令,不过不建议在子函数之间跳转,有可能会出错,JMP是没有现成保护的纯跳转,你应该注意你程序碰见ret指令返回时的位置。。。
最简单的一个事就是比如函数1的返回值是个2字节的数,函数2的返回值是个4字节的数,当你从第一个子程序跳到第二个,其实主函数是没有调用函数2,当函数2返回时,他会认为函数返回值仍然是2字节,这个时候就出错了,不同的函数的参数表也是不同的,这也一样会导致程序出错。。。所以这种跳转只是蹩脚适合无参数无返回值的纯过程。。。。
最简单的一个事就是比如函数1的返回值是个2字节的数,函数2的返回值是个4字节的数,当你从第一个子程序跳到第二个,其实主函数是没有调用函数2,当函数2返回时,他会认为函数返回值仍然是2字节,这个时候就出错了,不同的函数的参数表也是不同的,这也一样会导致程序出错。。。所以这种跳转只是蹩脚适合无参数无返回值的纯过程。。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询