C语言 如何像汇编一样跨函数跳转

我是在单片机编程中使用,在一个子程序运行到一个位置时,无条件跳转到主函数的某一特定位置,继续运行接下来的语句,该子程序可能被嵌套了多层,如果单纯返回也不能返回到主函数。类... 我是在单片机编程中使用,在一个子程序运行到一个位置时,无条件跳转到主函数的某一特定位置,继续运行接下来的语句,该子程序可能被嵌套了多层,如果单纯返回也不能返回到主函数。类似于C语言的goto语句,但是是可以跨函数的。
我听说汇编就可以很容易无条件跳转,不知道C语言能不能也这样。谢谢~~
如果用跳转会很方便,因为有很多子程序都需要做同样的跳转动作。但是用函数返回值的方法会相当的麻烦。
展开
 我来答
lihn1987
2011-02-13 · TA获得超过603个赞
知道答主
回答量:40
采纳率:0%
帮助的人:63.7万
展开全部
额,你这个问题有点纠结

你可以想象下函数间的跳转。。。
函数的调用是一个压栈和弹栈的过程,假如以在函数间随意跳转,而不返回的话,那么就是不停的压栈,而不弹栈,而调转到另一函数的堆栈区间也将被破坏,这样就会产生一些不确定的诡异错误,我想这个你是可以想象的到的

但是你说想无条件跳转,那么函数间的跳转时不现实的,只能嵌套。
我推荐的方法是使用状态机,在单片机的while中档函数返回后判断当前状态决定下一个执行的函数。这种方法在程序设计中很常用

但是你假如是在想实现那种无条件跳转,其实也是可以的,不过需要使用C的宏来代替函数
比如有这样个函数
void set_val(int* a , int val)
{
*a = val;
}
void main()//对于单片机main的返回没啥意义
{
int a = 0;
while(1)
{
set_val(&a, 1);
}
}
可以改成这样
#define set_val( a , val)\
a = val;\
goto jump;\

void main()//对于单片机main的返回没啥意义
{
int a = 0;
while(1)
{
jump:
set_val(a, 1);
}
}
用宏而不适用函数这样基本可以满足你的需要,就是任意跳转,不过这种结构我十分不推荐。。。
这个程序我都没调试过,不过意思是这个意思
你可能汇编写的比较多,对C语言了解可能不多,我以前写单片机的时候也是用C写的,没啥实现不了的功能,慢慢你就习惯了哈
百度网友4a70fda42
2011-02-14 · TA获得超过960个赞
知道小有建树答主
回答量:361
采纳率:0%
帮助的人:0
展开全部
C语言最大的特点就在于它的结构化,调用函数和返回值其实是在系统堆栈中进行压栈和出栈的过程,因此跨函数跳转是不能实现的。另外建议在C语言中应尽量避免使用goto语句。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bdlanyu
2011-02-13 · TA获得超过550个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:524万
展开全部
setjmp
longjmp
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式